只是想知道你是否可以帮我解决这个问题:
我有一个多维数组...
$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的值的最快和最有效方法的想法。我不需要回显或使用任何值。如果数组中有任何ID为“key”且值为“152”的记录,我只需要检查(返回true)。
答案 0 :(得分:64)
没有什么比简单的循环更快。您可以混合并匹配一些数组函数来执行此操作,但它们也只是作为循环实现。
function whatever($array, $key, $val) {
foreach ($array as $item)
if (isset($item[$key]) && $item[$key] == $val)
return true;
return false;
}
答案 1 :(得分:21)
这是Dan Grossman的答案的更新版本,它将满足多维数组(我之后的目标):
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;
}
答案 2 :(得分:11)
** 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'));
答案 3 :(得分:8)
如果你必须进行大量的“id”查找并且它应该非常快,你应该使用包含所有“id”作为键的第二个数组:
$lookup_array=array();
foreach($my_array as $arr){
$lookup_array[$arr['id']]=1;
}
现在,您可以非常快速地检查现有ID,例如:
echo (isset($lookup_array[152]))?'yes':'no';
答案 4 :(得分:4)
正如你的问题,这实际上是一个简单的二维数组不是更好吗?看看 -
假设您的二维数组名称$ 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'的内部索引,具有您的$ value。如果key_name'name'也有$ value
,那么这里的一些其他答案也可能是真的答案 5 :(得分:2)
return 0 < count(
array_filter(
$my_array,
function ($a) {
return array_key_exists('id', $a) && $a['id'] == 152;
}
)
);
注意:array_key_exists
来电是可选的。它只是为了代码的耐用性。
答案 6 :(得分:1)
尝试使用以下代码。它应该适用于任何类型的多维数组搜索。
您可以在此处查看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;
}
答案 7 :(得分:1)
一个好的解决方案可以是@Elias Van Ootegan
在评论中提供的解决方案:
$ids = array_column($array, 'id', 'id');
echo isset($ids[40489])?"Exist":"Not Exist";
我试过并为我工作,感谢伙计。
<强>被修改强>
注意:它适用于PHP 5.5 +
答案 8 :(得分:1)
我偶然发现了这篇文章,希望做同样的事情,并提出了自己的解决方案,我想为该页面的未来访问者提供该解决方案(并查看这样做是否会带来我没有预见到的任何问题)。
如果要获取简单的true
或false
输出,并希望使用一行代码执行此操作而没有函数或循环,则可以序列化数组,然后使用{{1} }搜索值:
stripos
这似乎对我有用。
答案 9 :(得分:0)
我编写了以下函数,以确定多维数组是否部分包含某个值。
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. E.G.: 'value' <=> 'This contains the value'
if ( ! empty($key) && $key == $needle && strpos($item, $value) !== false){
return true;
}
}
return $found;
}
像这样调用函数:
$this->findKeyValue($array, $key, $value);
答案 10 :(得分:0)
$ 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
答案 11 :(得分:0)
function checkMultiArrayValue($array) {
global $test;
foreach ($array as $key => $item) {
if(!empty($item) && is_array($item)) {
checkMultiArrayValue($item);
}else {
if($item)
$test[$key] = $item;
}
}
return $test;
}
$multiArray = array(
0 => array(
"country" => "",
"price" => 4,
"discount-price" => 0,
),);
$test = checkMultiArrayValue($multiArray);
echo "<pre>"
print_r($test);
将返回具有索引和值的数组
答案 12 :(得分:0)
最简单的方法是这样
$my_array = array(
0 => array(
"name" => "john",
"id" => 4
),
1 => array(
"name" => "mark",
"id" => 152
),
2 => array(
"name" => "Eduard",
"id" => 152
)
);
if (array_search(152, array_column($my_array, 'id')) !== FALSE)
echo 'FOUND!';
else
echo 'NOT FOUND!';
答案 13 :(得分:0)
您只能将其与两个参数一起使用
function whatever($array, $val) {
foreach ($array as $item)
if (isset($item) && in_array($val,$item))
return 1;
return 0;
}
答案 14 :(得分:0)
我不知道这对性能是好是坏,但这里有一个替代方案:
$keys = array_map(function($element){return $element['id'];}, $my_array);
$flipped_keys = array_flip($keys);
if(isset($flipped_keys[40489]))
{
// true
}