Здравствуйте!
имеется массив:
$GLOBAL= [
3515 => [
'sub_categories' => [
22916 => [
'sub_categories' => [
33221 => 'test'
]
],
]
],
35215 => [
'sub_categories' => [
221916 => 'test2'
]
],
];
Как видно размерность бывает разная, вплоть до 10 вложений.
Вопрос в том как получать программно путь для изменения нужного подмассива.
Написать что-то типа
$GLOBAL[3515]["sub_categories"][22916]["sub_categories"][22920]["sub_categories"] = [ 3333 => 'test3']
Естественно не подходит, т.к. у меня все динамически и путь и размерность заранее неизвестны.
У меня есть поиск по ключу
function searchArr($array, $key, $value)
{
$results = array();
if (is_array($array)) {
if (isset($array[$key]) && $array[$key] == $value) {
$results = $array;
}
foreach ($array as $subarray) {
$results = array_merge($results, searchArr($subarray, $key, $value));
}
}
return $results;
}
Находит он замечательно, но возвращает массив, а мне необходимо ссылку на этот элемент чтобы потом модифицировать в массиве $GLOBAL.
Пытался даже в строку путь, но потом не сообразил как применять его и eval
// заранее известный путь из некоторых ключей
$path = '3515.22916.22920.25109.30158';
$parents = explode(".",$path);
foreach($parents as $parent_id){
$s .= '['.$parent_id.'][\'sub_categories\']';
}
echo $s; // [3515]['sub_categories'][22916]['sub_categories'][22920]['sub_categories'][25109]['sub_categories'][30158]['sub_categories']
// Как обратится к масcиву $GLOBALтак и не понял
$c = eval($s);
Что-то искал вчера целый день, построение ссылки на нужный элемент массива, узнать родителя массива, ничего подобного не нашел. Уже мысль была про кучу вложенных foreach, но это не комильфо.
Подскажите пожалуйста как изменять элементы не зная заранее путь