2016-10-15 12 views
0

私は、このような形式で、2つの配列に変換するにはどのようにこの形式のStringPHP複雑なパターン文字列を2つの配列に変換する方法は?

{value=very big +$5},{value=super big +$10},{value=extra big +$15} 

を持っていますか?私は、文字列の形式は、単純な形式である場合を使用して)(を爆発することを行うことができ

$name=["very big","super big","extra big"]; 
$price=["5","10","15"]; // OR $price=[5,10,15]; 

:例えば

。しかし、このフォーマットは複雑すぎる。誰でもそのことを知っていますか?

+1

「、」で爆発し、分解したアイテムを分解します。 –

+0

@u_mulder ok。 Explode by、および{}を削除します。残りの「価値=非常に大きな+5ドル」はどうですか? – gosulove

+1

'='で爆発しますか? '$'で爆発する? '+ $'で爆発する? –

答えて

1

使用explode',' ,'=' ,'+$'

$string = "{value=very big +$5},{value=super big +$10},{value=extra big +$15}"; 
$temp_array = (explode(",",$string)); 
foreach($temp_array as $val)  
{ 
    $temp_array = (explode("=",$val)); 
    $temp_string = $temp_array[1]; 
    $temp_string = str_replace("}","",$temp_string); 
    $temp_array = (explode("+$",$temp_string)); 
    $name[] = $temp_array[0]; 
    $price[] = $temp_array[1]; 
} 

DEMO

0

あなたは、例えば、この作業をする必要があり、正規表現を使用することができます。

preg_match_all('/value=([\w\s]+)\s\+/', $string, $matches) 
preg_match_all('/\$([\d]+)\}/', $string, $matches) 
1

とスニペットは、以下の示唆のようにそれをしようとします。 Quick-Test: Here.

<?php 

    $string  = '{value=very big +$5},{value=super big +$10},{value=extra big +$15}'; 
    $arrParts = explode(',', $string); 
    $name  = []; 
    $price  = []; 
    $result  = []; 

    foreach($arrParts as $iKey=>$part){ 
     $block  = preg_replace(["#^\{.*?=#", "#\}$#"], "", $part); 
     $segments = preg_split("#\s#", $block); //<== CREATE AN ARRAY WITH 3 COLUMNS 

     list($val1, $val2, $val3) = $segments; 
     $namePart     = $val1 . " {$val2}"; 
     $pricePart     = preg_replace("#[\+\-\$]#", "",$val3); 
     $name[]      = $namePart; 
     $price[]     = $pricePart; 

     // BONUS: JUST CREATE A 3RD ARRAY WITH NAMED-KEY 
     $result[$namePart]   = $pricePart; 
    } 
    var_dump($name); 
    //YIELDS:: 
    array (size=3) 
     0 => string 'very big' (length=8) 
     1 => string 'super big' (length=9) 
     2 => string 'extra big' (length=9) 

    var_dump($price); 
    //YIELDS:: 
    array (size=3) 
     0 => string '5' (length=1) 
     1 => string '10' (length=2) 
     2 => string '15' (length=2) 

    var_dump($result); 
    //YIELDS:: 
    array (size=3) 
     'very big' => string '5' (length=1) 
     'super big' => string '10' (length=2) 
     'extra big' => string '15' (length=2) 
関連する問題