PHP:检查多维数组中是否存在值和键

Rob*_*Rob 57 php arrays

只是想知道你是否可以帮我解决这个问题:

我有一个多维数组......

$my_array = array(    
        0 =>  array(  
            "name"   => "john",  
            "id"    =>  4  
        ),  
        1   =>  array(  
            "name" =>  "mark",  
            "id" => 152  
        ), 
    2   =>  array(  
            "name" =>  "Eduard",  
            "id" => 152  
        )
);
Run Code Online (Sandbox Code Playgroud)

想知道什么是最快和最有效的方法来检查数组$ my_array是否包含任何具有键"id"及其值152的值.我不需要回显或使用任何值.如果数组中有任何ID为"key"且值为"152"的记录,我只需要检查(返回true).

Dan*_*man 67

没有什么比简单的循环更快.您可以混合并匹配一些数组函数来完成它,但它们也只是作为循环实现.

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


Fri*_*ode 23

这是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;
}
Run Code Online (Sandbox Code Playgroud)


Jaz*_*zer 22

最简单的方法是这样的:

$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!';
}
Run Code Online (Sandbox Code Playgroud)


小智 13

**PHP> = 5.5

只是你可以使用它

$key = array_search(40489, array_column($userdb, 'uid'));
Run Code Online (Sandbox Code Playgroud)

让我们假设这个多维数组:

$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'));
Run Code Online (Sandbox Code Playgroud)

  • 对于未来的研究人员来说,重要的是要澄清“$key”可能是“0”,这是一个错误值。要知道“array_search()”是否找到了合格的数据,您必须根据您的需要显式检查“$key !== false”或“$key === false”。 (4认同)
  • 为什么不简单地`$ ids = array_column($ array,'id','id');`然后`isset($ ids [40489])`? (3认同)

ste*_*ewe 8

如果你必须进行大量的"id"查找并且它应该非常快,你应该使用包含所有"id"的第二个数组作为键:

$lookup_array=array();

foreach($my_array as $arr){
    $lookup_array[$arr['id']]=1;
}
Run Code Online (Sandbox Code Playgroud)

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

echo (isset($lookup_array[152]))?'yes':'no';
Run Code Online (Sandbox Code Playgroud)


Imr*_*mer 5

一个好的解决方案可以@Elias Van Ootegan在评论中提供,即:

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

我试过了并为我工作,谢谢伙计。

已编辑

注意:它适用于 PHP 5.5+