2016-09-06 2 views
1

Мне нужно преобразовать структуру, как это:Построить и заполнить многомерный ассоциативный массив из многих разделителей строк

$source[0]["path"]; //"production.options.authentication.type" 
$source[0]["value"]; //"administrator" 
$source[1]["path"]; //"production.options.authentication.user" 
$source[1]["value"]; //"admin" 
$source[2]["path"]; //"production.options.authentication.password" 
$source[2]["value"]; //"1234" 
$source[3]["path"]; //"production.options.url" 
$source[3]["value"]; //"example.com" 
$source[4]["path"]; //"production.adapter" 
$source[4]["value"]; //"adap1" 

во что-то вроде этого:

$result["production"]["options"]["authentication"]["type"]; //"administrator" 
$result["production"]["options"]["authentication"]["user"]; //"admin" 
$result["production"]["options"]["authentication"]["password"]; //"1234" 
$result["production"]["options"]["url"]; //"example.com" 
$result["production"]["adapter"]; //"adap1" 

Я нашел подобный вопрос, но я не может адаптировать его к моей конкретной версии проблемы: PHP - Make multi-dimensional associative array from a delimited string

+1

Какой код вы пытались найти? – gabe3886

+0

Я попытался адаптировать выбранный ответ связанного вопроса, но он только строит массив из одной строки, и я не могу заставить его построить массив из нескольких строк (без замены структуры) и заполнить значения. – CarlosAS

+0

можете ли вы опубликовать код, который у вас есть, даже если он не работает. Таким образом, мы можем видеть, что вы пробовали, и, возможно, pin-point, что не работает. – gabe3886

ответ

1

Не знаете, в каких проблемах вы столкнулись, но следующие работы в порядке. См. https://eval.in/636072 для демонстрации.

$result = []; 

// Each item in $source represents a new value in the resulting array 
foreach ($source as $item) { 
    $keys = explode('.', $item['path']); 

    // Initialise current target to the top level of the array at each step 
    $target = &$result; 

    // Loop over each piece of the key, drilling deeper into the final array 
    foreach ($keys as $key) { 
     $target = &$target[$key]; 
    } 

    // When the keys are exhausted, assign the value to the target 
    $target = $item['value']; 
} 
+0

Полностью решение проблемы. Благодаря! – CarlosAS

Смежные вопросы