Просто интересно, можете ли вы дать мне руку с этим:
У меня многомерный массив …
$my_array = array( 0 => array( "name" => "john", "id" => 4 ), 1 => array( "name" => "mark", "id" => 152 ), 2 => array( "name" => "Eduard", "id" => 152 ) );
Любая идея о том, какой был бы самый быстрый и эффективный способ проверить, содержит ли массив $ my_array какое-либо значение с ключом «id» и его значением 152. Мне не нужно эхо или использовать какие-либо из значений. Мне просто нужно проверить (вернуть true), если в массиве есть записи с идентификатором «ключ» и значением «152».
Ничто не будет быстрее, чем простой цикл. Вы можете комбинировать и сопоставлять некоторые функции массива, но они будут реализованы как цикл.
function whatever($array, $key, $val) { foreach ($array as $item) if (isset($item[$key]) && $item[$key] == $val) return true; return false; }
Вот обновленная версия ответа Дэна Гроссмана, которая будет обслуживать многомерные массивы (что я был после):
function find_key_value($array, $key, $val) { foreach ($array as $item) { if (is_array($item) && find_key_value($item, $key, $val)) return true; if (isset($item[$key]) && $item[$key] == $val) return true; } return false; }
Если вам нужно много искать «id», и это должно быть очень быстро, вы должны использовать второй массив, содержащий все «идентификаторы» в качестве ключей:
$lookup_array=array(); foreach($my_array as $arr){ $lookup_array[$arr['id']]=1; }
Теперь вы можете быстро проверить существующий идентификатор, например:
echo (isset($lookup_array[152]))?'yes':'no';
** PHP> = 5.5
просто вы можете использовать это
$key = array_search(40489, array_column($userdb, 'uid'));
Предположим, что этот многомерный массив:
$userdb=Array ( (0) => Array ( (uid) => '100', (name) => 'Sandra Shush', (url) => 'urlof100' ), (1) => Array ( (uid) => '5465', (name) => 'Stefanie Mcmohn', (pic_square) => 'urlof100' ), (2) => Array ( (uid) => '40489', (name) => 'Michael', (pic_square) => 'urlof40489' ) ); $key = array_search(40489, array_column($userdb, 'uid'));
Как и в вашем вопросе, который на самом деле является простым двухмерным массивом, не лучше ли это? Взгляни-
Скажем, ваше двумерное имя массива $ my_array и значение для поиска – $ id
function idExists($needle='', $haystack=array()){ //now go through each internal array foreach ($haystack as $item) { if ($item['id']===$needle) { return true; } } return false; }
и называть его:
idExists($id, $my_array);
Как вы можете видеть, на самом деле проверяет только, есть ли какой-либо внутренний индекс с ключом «id» только с вашим значением $. Некоторые другие ответы здесь также могут быть истинными, если имя_имя 'name' также имеет значение $ value
return 0 < count( array_filter( $my_array, function ($a) { return array_key_exists('id', $a) && $a['id'] == 152; } ) );
Примечание: вызов array_key_exists
является обязательным. Он просто поддается коварной выносливости.
Попробуйте этот ниже код. Он должен отлично работать для любого поиска многомерных массивов.
Здесь вы можете увидеть LIVE DEMO EXAMPLE
function multi_array_search($search_for, $search_in) { foreach ($search_in as $element) { if ( ($element === $search_for) ){ return true; }elseif(is_array($element)){ $result = multi_array_search($search_for, $element); if($result == true) return true; } } return false; }
Хорошим решением может быть приложение, представленное @Elias Van Ootegan
в комментарии:
$ids = array_column($array, 'id', 'id'); echo isset($ids[40489])?"Exist":"Not Exist";
Я попробовал и работал на меня, спасибо, друг.
отредактированный
Примечание. Он будет работать в PHP 5.5+
Используйте array_map ()
$ options – массив, в котором вы ищете.
$arr = array_map(function($ar) { if(array_key_exists('name_of_the_key_you_search_for',$ar)){ return true; }else{ return false; } },$options ); var_dump($arr); //just for test, remove in the code
Я написал следующую функцию, чтобы определить, содержит ли многомерный массив частично определенное значение.
function findKeyValue ($array, $needle, $value, $found = false){ foreach ($array as $key => $item){ // Navigate through the array completely. if (is_array($item)){ $found = $this->findKeyValue($item, $needle, $value, $found); } // If the item is a node, verify if the value of the node contains // the given search parameter. EG: 'value' <=> 'This contains the value' if ( ! empty($key) && $key == $needle && strpos($item, $value) !== false){ return true; } } return $found; }
Вызвать функцию следующим образом:
$this->findKeyValue($array, $key, $value);