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

Nic*_*ero 24 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";
}
Run Code Online (Sandbox Code Playgroud)

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

Ana*_*Die 65

您可以使用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";
}
?>
Run Code Online (Sandbox Code Playgroud)

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

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

if(array_search(100, array_column($userdb, 'uid')) !== false) {
    echo "FOUND";
} else {
    echo "Not Found";
}
Run Code Online (Sandbox Code Playgroud)

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

它说: -

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

php处理0false1true当谈到作为一个函数的返回值.这就是你的代码失败的原因,因为你的代码会返回0.

  • 请注意PHP 5.5+. (6认同)