2010-03-23 2 views
2

Возможно, кто-то может помочь мне с этим:Найти ключ от родителя в массиве/PHP

Я использую базовую функцию поиска, чтобы найти массив в глубине массива. Проблема в том, что после того, как этот массив будет найден, я также хотел бы вернуть его родительский ключ. Есть ли функция 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] => 
           ) 

         ) 

       ) 

Если я ищу что-то с ' идентификатор»из„J“, я хотел бы получить этот массив в качестве результата:

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

) 

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

ответ

0

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

Вы также можете немного изменить свой Еогеасп к чему-то вроде

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

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

1

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

+0

@Jordan Как это? Просто используйте расширенный синтаксис foreach, и вы получите его –

Смежные вопросы