2017-08-04 90 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; 

平息輸出是一個非常hacky的方式來實現這...

回答

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))))