PHP:检查multidimensional array中是否存在值和键

只是想知道你能不能帮我一把:

我有一个multidimensional array…

$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)数组是否有ID“key”和值“152”的任何logging。

没有什么比简单的循环更快。 你可以混合使用一些数组函数来完成它,但它们也只是作为一个循环来实现。

 function whatever($array, $key, $val) { foreach ($array as $item) if (isset($item[$key]) && $item[$key] == $val) return true; return false; } 

这里是Dan Grossman的答案的更新版本,将迎合multidimensional array(我之后):

 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”查找,它应该是非常快的,你应该使用第二个数组包含所有的“ID”作为关键:

 $lookup_array=array(); foreach($my_array as $arr){ $lookup_array[$arr['id']]=1; } 

现在您可以非常快地检查现有的ID,例如:

 echo (isset($lookup_array[152]))?'yes':'no'; 

** PHP> = 5.5

只要你可以使用这个

$ key = array_search(40489,array_column($ userdb,'uid'));

假设这个multidimensional array:

 $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); 

正如你所看到的,它实际上只检查是否有任何只有key_name'id'的内部索引,有你的$值。 如果key_name'name'也有$ value,那么在这里可能会有其他答案

 return 0 < count( array_filter( $my_array, function ($a) { return array_key_exists('id', $a) && $a['id'] == 152; } ) ); 

注意: array_key_exists调用是可选的。 它只是适应代码的强度。

尝试使用下面的代码。 它应该适用于任何types的multidimensional arraysearch。

在这里你可以看到现场演示示例

 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; } 

一个好的解决scheme可以是@Elias Van Ootegan提供的一个评论:

 $ids = array_column($array, 'id', 'id'); echo isset($ids[40489])?"Exist":"Not Exist"; 

我试了一下,为我工作,感谢哥们。

编辑

注意:它将在PHP 5.5+工作

使用array_map()

$ options是你正在search的数组。

 $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 

我写了下面的函数,以确定multidimensional array是否部分包含某个值。

 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);