Я пытаюсь найти способ возвратить значение родительского ключа массива.
Например, от массива ниже я хотел бы узнать ключ родителя где $array ['идентификатор'] == "0002". Родительский ключ очевиден, потому что он определяется здесь (это были бы 'продукты'), но обычно это будет динамично, следовательно проблема. 'Идентификатор' и значение 'идентификатора' известны все же.
[0] => Array
(
[data] =>
[id] => 0000
[name] => Swirl
[categories] => Array
(
[0] => Array
(
[id] => 0001
[name] => Whirl
[products] => Array
(
[0] => Array
(
[id] => 0002
[filename] => 1.jpg
)
[1] => Array
(
[id] => 0003
[filename] => 2.jpg
)
)
)
)
)
Небольшая грубая рекурсия, но она должна работать:
function find_parent($array, $needle, $parent = null) {
foreach ($array as $key => $value) {
if (is_array($value)) {
$pass = $parent;
if (is_string($key)) {
$pass = $key;
}
$found = find_parent($value, $needle, $pass);
if ($found !== false) {
return $found;
}
} else if ($key === 'id' && $value === $needle) {
return $parent;
}
}
return false;
}
$parentkey = find_parent($array, '0002');
Поскольку у вас есть дерево это может сделать либо структура BFS , либо DFS . Поскольку структура переменная, рекурсивное решение подойдет. Просто верните дозорного, когда найдете значение, а затем верните ключ в вызывающей стороне.