PHP - Найдите родительский ключ массива

Я пытаюсь найти способ возвратить значение родительского ключа массива.

Например, от массива ниже я хотел бы узнать ключ родителя где $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
                                         )
                                )
                         )
                 )
          )
7
задан Jay Are 24 March 2010 в 00:55
поделиться

2 ответа

Небольшая грубая рекурсия, но она должна работать:

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');
1
ответ дан 7 December 2019 в 20:36
поделиться

Поскольку у вас есть дерево это может сделать либо структура BFS , либо DFS . Поскольку структура переменная, рекурсивное решение подойдет. Просто верните дозорного, когда найдете значение, а затем верните ключ в вызывающей стороне.

2
ответ дан 7 December 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: