#php #multidimensional-array
#php #многомерный массив
Вопрос:
У меня есть такой массив:
Array(
'level1' => 'someval',
'level2' => 'someotherval',
'level3' => 'thirdval'
)
Я хочу превратить это в это:
Array(
'someval' => Array(
'someotherval' => Array(
'thirdval' => 1
)
)
)
Очевидно, я мог бы построить приведенный выше пример вручную, но я не знаю, сколько там будет уровней. И этот простой пример может показаться бесполезным, но значений будет больше, поэтому внутри каждого из уровней будет несколько массивов.
Комментарии:
1. Ваши вопросы немного расплывчаты? что вам нужно хранить внутри многомерного массива? Какие состояния, на какой уровень должен быть вложен массив и т.д. и т.п.? Будет ли этот шаблон продолжаться или некоторые уровни будут содержать несколько значений?
2. Откуда берется ценность
1
?3. @Tim Cooper Извините, это была опечатка.
Ответ №1:
Это сделает это
$array = array(
'level1' => array(
'level2' => array(
'level3' => 1
)
)
);
Комментарии:
1. Извините, я неправильно напечатал часть своего вопроса. Пожалуйста, также посмотрите последний абзац. Я могу легко построить массив так, как вы продемонстрировали, но я не знаю, сколько в нем будет уровней, поэтому мне нужно рекурсивно перебирать его или что-то подобное.
2. Не уверен, что вы ищете, но вы можете исследовать «передачу по ссылке» и «рекурсивные» вызовы функций / методов. Это может немного помочь вашему пониманию.
Ответ №2:
Вот мой взгляд на это:
function make_multi_level_array($arr) {
if (count($arr) == 1) return array(array_pop($arr) => 1);
else {
$level_key = array_pop(array_reverse($arr));
$sub_level = make_multi_level_array(
array_slice($arr,1,count($arr)-1)
);
return array(
$level_key => $sub_level
);
}
}
$arr = array(
'level1' => 'someval',
'level2' => 'someotherval',
'level3' => 'thirdval',
);
var_dump(make_multi_level_array($arr));
Выведет это:
array(1) {
["someval"]=>
array(1) {
["someotherval"]=>
array(1) {
["thirdval"]=>
int(1)
}
}
}
Также пробовал другие случаи, подобные приведенным ниже.
$arr = array(
'level1' => 'someval',
'level2' => 'someotherval',
'level3' => 'thirdval',
'level4' => 'fourthval'
);
Кажется, все в порядке:
array(1) {
["someval"]=>
array(1) {
["someotherval"]=>
array(1) {
["thirdval"]=>
array(1) {
["fourthval"]=>
int(1)
}
}
}
}
Ответ №3:
Вам нужно что-то подобное?
$levels = array_keys(Array(
'level1' => 'someval',
'level2' => 'someotherval',
'level3' => 'thirdval'
));
$array = Array();
$aux = amp;$array;
foreach ($levels as $level => $value) {
if ($aux == 1)
$aux = array($value => 1);
$aux = amp;$aux[$value];
}
var_dump($array);
Комментарии:
1. Никогда раньше не пробовал использовать «amp;» в PHP. Выглядит хорошо. Попробую 🙂