PHP: есть ли способ сгенерировать путь до элемента массива на любой уровень вложенности в цикле?
Массив можно раскрыть на какой-то уровень вложенности циклом. foreach($arr as $key => $value).
Но если он может поступить с разным уровнем вложенности, например,
[1] => [2] = [3] или [1] => [2] = [3] => [4] => [5], то цикл или два цикла не помогут. Элементов может быть либо больше, либо меньше.
А если в массиве 100 ключей? Не писать же $arr[$next][$next][$next][$next] и так далее 100 раз.
Добраться до произвольного элемента на глубину, при том, что не известно, будет ли он вообще, можно через рекурсию, но неужели нет способа обойтись без нее?
Ответы (1 шт):
не совсем ясно что вы пытаетесь сделать, но ощущение что на входе вы имеет массив индексов по которому надо пройти, а-ля 0,1,10,3,5, что было бы эквивалентно доступу по пути $arr[0][1][10][3][5].
Если такой путь у вас имеется в качестве массив, то в в цикле его перебираете и двигаетесь к элементу
$data = [...]; // исходный массив
$value = getElement($data, [0,1,10,3,5]);
print_r($value);
function getElement(&$data, array $path){
$item = &$data;
foreach ($path as $index) {
if (is_array($item) && array_key_exists($item, $index)) {
$item = &$item[$index];
} else {
throw new Exception('path does not exist');
}
}
return $item;
}