#php #arrays #multidimensional-array
#php #массивы #многомерный массив
Вопрос:
Я хочу превратить (в PHP) что-то вроде
(["a"] => (
["x"] => "foo",
["y"] => "bar"),
["b"] => "moo",
["c"] => (
["w"] => (
["z"] => "cow" )
)
)
в
(["a.x"] => "foo",
["a.y"] => "bar",
["b"] => "moo",
["c.w.z"] => "cow")
Как мне этого добиться?
Комментарии:
1. это только 3 уровня глубины или произвольные уровни глубины?
2. Глубина составляет произвольные уровни, хотя она редко превышает 4 уровня.
Ответ №1:
Вы могли бы создать рекурсивную функцию:
function flatten($arr, amp;$out, $prefix='') {
$prefix = $prefix ? $prefix . '.' : '';
foreach($arr as $k => $value) {
$key = $prefix . $k;
if(is_array($value)) {
flatten($value, $out, $key);
}
else {
$out[$key] = $value;
}
}
}
Вы можете использовать его как
$out = array();
flatten($array, $out);
Комментарии:
1. Как мне сохранить полный путь к массиву в качестве идентификатора объектов с помощью этого?
2. @Cobra: Я не понимаю, что ты имеешь в виду. Пожалуйста, уточните.
3. $key = $prefix ? $prefix . ‘.’ . $k : $ k; Фактически в этой строке уже сохранен полный путь к массиву. 1 за это решение.
Ответ №2:
У вас здесь есть кое-что интересное:http://davidwalsh.name/flatten-nested-arrays-php
Комментарии:
1. На правильном пути, но это само по себе не создаст ключей, как хочет OP