是否有一个php函数来搜索key=>数组对?


Is there a php function to search a key=>array pair?

如何搜索数组以知道数组中是否有键=>值?

例如在下面的数组中,我想知道[uid] => 10是否存在。

<>之前 Array ( [0] => Array ( [name] => a [uid] => 1 ) [1] => Array ( [name] => b [uid] => 2 ) )

in_arrayarray_search可以很好地嵌套数组:

$a = array(
    array('id' => 10),
    array('id' => 11),
    array('id' => 12),
    array('id' => 13),
    array('id' => 14),
);
var_dump(in_array(array('id' => 14), $a)); // true
var_dump(in_array(array('id' => 99), $a)); // false
var_dump(array_search(array('id' => 14), $a)); // 4
var_dump(array_search(array('id' => 99), $a)); // false
$foundAt = null;
foreach($yourArray as $index => $pair){
    if($pair['uid']===10){
        $foundAt = $index;
        break;
    }
}
echo $foundAt;

$foundAt如果没有找到则为null,如果找到则为整数。

没有专门的内置函数。我只能想到array_walk在这里是有用的。

foreach($array as $index => $data){
   if ($data['uid'] === 10){
       echo $index;
       break;
   }
}

当你编辑你的问题时,每个元素里面有更多的值要测试,array_intersect_assoc浮现在脑海中。它处理每个元素都不能包含您正在查找的键的情况。

基本上:如果元素和指针的交集是指针,则元素匹配。

这个比较需要应用于每个元素,例如foreach。包装成一个函数,如果没有找到,函数可以返回键和FALSE:

function array_search_array(array $haystack, array $needle)
{
    foreach($haystack as $key => $element)
    {
        if ($needle == array_intersect_assoc($element, $needle))
            return $key;
    }
    return FALSE;
}
我必须承认,函数的命名不是最优的。演示

如果您需要搜索多个值(无论$needle中这些值的顺序如何),这也可以工作。

只要您只需要搜索单个键/值对,则应该在访问它之前检查该键。这是对Tom回答中的代码示例的修改:

$foundAt = null;
foreach($yourArray as $index => $pair)
{
    if(isset($pair['uid']) && $pair['uid'] === 10)
    {
        $foundAt = $index;
        break;
    }
}
echo $foundAt;

没有内置函数,但是你可以使用这样的函数:

if (count(array_intersect($your_array, array("uid" => 10))) > 0)
    // pair exists

分解上面的语句:

用你喜欢的键和值创建一个数组:

$array_to_search = array("uid" => 10);

使用array_intersect()获取数组的交集:

$result = array_intersect($your_array, $array_to_search);

计算结果元素:

if (count($result) > 0)
   // pair exists