2017-08-04 16 views
1

私は数日間これに苦しんでいて、そこに投げ捨てて、誰かにアイデアがあるかどうかを見たいと思っていました。文字列から連想配列への変換

基本的に私は、文字列など

1) "/0/bar" 

2) "/build/0/foo/1" 

とこれまでのところ、私が試した

1) $result[0][bar] 
2) $result[build][0][foo][1] 

多次元配列にこれを変換する必要があります。

出力を静め
$query = "/build/0/foo/1"; 
$queryAr = []; 
$current = &$queryAr; 
$keys = explode("/", $query); 

foreach($keys as $key) { 
    @$current = &$current[$key]; 
} 

$current = $value; 

をこれを達成するためのかなりハッピーな方法です...

答えて

1

文字列の最初の/をトリムする必要があります。 live demo

<?php 
$query = "/build/0/foo/1"; 
$queryAr = []; 
$current = &$queryAr; 
$keys = explode("/", trim($query, '/')); 

foreach($keys as $key) { 
    @$current = &$current[$key]; 
} 

$current = $value; 
print_r($queryAr); 
+0

が移動するための方法であるように思わが、なぜ正確にあなたが$現在= $値を持っているの?他の目的のために$ currentを使用すると、問題を避けるためにunset($ current)するのがよいでしょう。 –

0

私は、再帰関数のバージョン試してみました:

$query = "/build/0/foo/1"; 
print_r($result = buildNestedArray(explode('/', trim($query, '/')))); 

function buildNestedArray($keys) 
{ 
    $k = current($keys); 

    $result = [$k => 'DONE']; 
    array_shift($keys); 
    if (sizeof($keys) > 0) { $result[$k] = buildNestedArray($keys); } 

    return $result; 
} 

出力:Array ([build] => Array ([0] => Array ([foo] => Array ([1] => DONE))))

関連する問題