Найти ключ родителя в массиве / PHP - PullRequest
2 голосов
/ 23 марта 2010

Возможно, кто-то может помочь мне с этим:

Я использую базовую функцию поиска, чтобы найти массив глубоко внутри массива.Проблема в том, что когда массив найден, я бы также хотел вернуть его родительский ключ.Есть ли функция PHP, которая может определить родительский ключ массива?

Ниже приведен пример функции поиска ... В идеале я хотел бы вернуть найденный массив, а также его родительский ключ.

    function search($array, $key, $value){
    $results = array();

    if (is_array($array)){
        if ($array[$key] == $value){
            $results[] = $array;
        }
        foreach ($array as $subarray){
            $results = array_merge($results, search($subarray, $key, $value));
        }   
    }

    return $results;
}

ЗДЕСЬЭто пример лучшей иллюстрации, что я имею в виду: Вот пример массива, который я хотел бы найти:

    Array
(
    [categories] => Array
        (
            [1] => Array
                (
                    [data] => 
                    [id] => d
                    [name] => Bracelets
                    [products] => Array
                        (
                            [0] => Array
                                (
                                    [id] => j
                                    [name] => Red
                                    [data] => 
                                )

                            [1] => Array
                                (
                                    [id] => gi
                                    [name] => Torqoise
                                    [data] => 
                                )

                        )

                )

Если я ищу что-то с «id» из «j», Я бы получил этот массив в результате:

Array
(
    [0] => Array
        (
            [id] => j
            [name] => Red
            [data] => 
        )

)

Теперь, в идеале, я хотел бы также знать родительский ключ этого массива, который в примере ' Products ',который я, очевидно, должен был бы получить, прежде чем возвращать результаты ...

Ответы [ 2 ]

1 голос
/ 23 марта 2010

Нет, встроенной функции нет. Вы можете передать родительский ключ в функцию params

0 голосов
/ 23 марта 2010

Вы можете использовать array_flip (), чтобы поменять ключ и значения, чтобы вы могли получить ключ со значением.

Вы также можете слегка изменить свой foreach, например

foreach ($array as $subarray_key => $subarray){
  $results = array_merge($results, search($subarray, $key, $value));
}

и $ subarray_key будет ключом.

...