2016-12-15 2 views
2

У меня есть ассоциативный массив, где каждое значение представляет собой список чисел, как это:Найти ключ массива, где значение содержит определенное значение

$a['i']=[111, 333]; 

Учитывая значение 333, как я могу найти ключ i. То есть, ключ для списка, который содержит 333.

+0

Вы говорите об ассоциативных массивах? – Ismail

ответ

5

Если значения в вашем основном массиве были простыми типами - номерами, строками и т. Д. - вы бы хотели использовать array_search, чтобы найти связанный ключ. В вашем случае значением каждого элемента является другой массив, поэтому вам необходимо явно перебрать каждый элемент и выполнить поиск полученного массива для вашего значения. Нечто подобное должно сделать трюк:

function get_key_from_value(array $arr, $needle) 
{ 
    foreach ($arr as $key => $value) 
     if (in_array($needle, $value, true)) 
      return $key; 
    return null; 
} 

И вы могли бы назвать это так:

echo get_key_from_value($a, 333); 

Update: Это было упомянуто в комментариях, что это не является общим решением цели, так Я реализовал версию, которая:

function array_search_recursive($needle, array $haystack, $strict = false) 
{ 
    foreach ($haystack as $key => $value) { 
     if (is_array($value)) { 
      if (!is_null(array_search_recursive($needle, $value, $strict))) { 
       return $key; 
      } 
     } else { 
      if ($strict && $value === $needle) { 
       return $key; 
      } else if (!$strict && $value == $needle) { 
       return $key; 
      } 
     } 
    } 
    return null; 
} 

который можно назвать, как это (порядок аргументов основан на array_search):

echo array_search_recursive(333, $a); 
+0

A-M-A-Z-I-N-G! THANKSSSSS !!!!!! –

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