2016-03-26 7 views
0

連想配列の文字列を解析するにはどうすればよいですか?PHP:文字列["key"、 "value"]を連想配列にパースする

[ ["key1", "value1"], ["key2", "value2"], ["key3", "value3] ] 

の中へ:

Array 
(
    ["key1"] => "value1" 
    ["key2"] => "value2" 
    ["key3"] => "value3" 
) 

ありがとう!

編集:

$stringdata ='[ ["key1", "value1"], ["key2", "value2"], ["key3", "value3"] ]'; 

答えて

1

配列全体をループ、ループを使用して、キーとしての第1の要素と第2要素としてを使用して新しい配列に自分の価値観を割り当てる:データは文字列フォーマット、すなわちであります値。

$new_array = array(); 
foreach($array as $arr) { 
    $new_array[$arr[0]] = $arr[1]; 
} 

しかし、私は、次の正規表現のアプローチを取ると、ループだろう配列に文字列を解析するために:通常、このよう

$str = '[ ["key1", "value1"], ["key2", "value2"], ["key3", "value3"] ]'; 
preg_match_all('/(\[("(.*?)"), ("(.*?)")\])/i', $str, $matches); 
//Now we have in $matches[3] and $matches[5] the keys and the values 
//and we would now turn this into an array using a loop 

$new_array = array(); 
for($k = 0; $k < count($matches[3]); $k++) { 
    $new_array[$matches[3][$k]] = $matches[5][$k]; 
} 

このライブデモにhttps://3v4l.org/u3jpl

0

使った機能的なアプローチを参照してください。 array_reduce

<?php 
$ar = [ ["key1", "value1"], ["key2", "value2"], ["key3", "value3"] ]; 
$newAr = array_reduce($ar, function($carry, $item) { 
    $carry[$item[0]] = $item[1]; 
    return $carry; 
}); 

var_dump($newAr); 

出力:

array(3) { 
    ["key1"]=> 
    string(6) "value1" 
    ["key2"]=> 
    string(6) "value2" 
    ["key3"]=> 
    string(6) "value3" 
} 
0

ここにはjson_decodeを使用する解決策があります。

<?php 

$json = json_decode('[["key1", "value1"], ["key2", "value2"], ["key3", "value3"]]'); 

$final = array(); 
foreach($json as $value) { 
    $final[] = array($value[0]=>$value[1]); 
} 

finalは、必要な形式の配列です。