使用array_search和array_column检查多维数组中是否存在值,而不返回Array [0]的值

时间:2016-06-27 13:00:25

标签: php arrays multidimensional-array

我需要检查多维数组中是否存在值。我在StackoverflowPHP.NET上找到了我喜欢的这个例子,因为它是一个优雅而紧凑的解决方案,但我注意到了一个奇怪的行为:

$userdb=Array
(
(0) => Array
    (
        (uid) => '100',
        (name) => 'Sandra Shush',
        (pic_square) => 'urlof100'
    ),

(1) => Array
    (
        (uid) => '5465',
        (name) => 'Stefanie Mcmohn',
        (pic_square) => 'urlof100'
    ),

(2) => Array
    (
        (uid) => '40489',
        (name) => 'Michael',
        (pic_square) => 'urlof40489'
    )
);



if(array_search(100, array_column($userdb, 'uid'))) {
    echo "FOUND";
}

如果您检查 FIRST 数组(Array [0])的任何值的存在,则IF语句不会返回任何值。它确实与其他数组的值一起使用。首先尝试使用100,然后尝试40489(或尝试使用"名称"或" pic_square")。

4 个答案:

答案 0 :(得分:47)

您可以使用下面的in_array(): -

<?php
$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'
    )
);
print_r(array_column($userdb, 'uid')); 
if(in_array(100, array_column($userdb, 'uid'))) { // search value in the array
    echo "FOUND";
}
?>

输出: - https://eval.in/1058147

注意: - 如果您修改比较,您的代码也会起作用: -

if(array_search(100, array_column($userdb, 'uid')) !== False) {
    echo "FOUND";
} else {
    echo "Not Found";
}

通过手册: - http://php.net/manual/en/function.array-search.php

它说: -

  

如果在数组中找到针,则返回针的键,否则返回FALSE。

php0视为false,将1视为true,当它来自函数的返回值时。这就是您的代码失败的原因,因为您的代码返回0

答案 1 :(得分:3)

那是因为array_search返回密钥,在本例中为0,等于false。您需要进行严格的比较,即:

if (false !== array_search(100, array_column($userdb, 'uid'))) {
    ...  
}

See here

答案 2 :(得分:3)

这是因为,您的值100位于第一个索引0中,因此如果条件失败。而是严格地与false进行比较:

DEMO

if(array_search(100, array_column($userdb, 'uid')) !== False) {
    echo "FOUND";
} else {
    echo "Not Found";
}

对于此实例,最好使用in_array,因为您只是检查元素是否在数组中。如果要检索元素的索引,请使用array_search

答案 3 :(得分:0)

你可以尝试这个:

$res1 =Array
(
'0' => Array
    (
        'uid' => '100',
        'name' => 'Sandra Shush',
        'url' => 'urlof100'
    ),

'1' => Array
    (
        'uid' => '5465',
        'name' => 'Stefanie Mcmohn',
        'pic_square' => 'urlof100'
    )
);

$res2 =Array
(
'0' => Array
    (
        'uid' => '40489',
        'name' => 'Michael',
        'pic_square' => 'urlof40489'
    )

'1' => Array
    (
        'uid' => '5465',
        'name' => 'Stefanie Mcmohn',
        'pic_square' => 'urlof100'
    )
);

foreach ($res1 as $key=>$item1)
{
    $val=$item1['uid'];
    foreach ($res2 as $key2=>$item2)
    {
          if ($item2['uid'] == $val)
           {
                //value 5465 found
           }
    }
}