即使字符串存在,array_search函数也返回 false


array_search function returns false even if string exist

我试图在数组中找到数组值的key。所以我array_search()尝试这样做。如果找到值,则应返回键,如果没有相等的值,则应返回 false。在这里我得到false甚至字符串(testing@example.com)都存在。

    <?php
    $one = array('testing@example.com','example@example.com');
    $two = array('testing@example.com');
    var_dump(array_search($one,$two)); // getting false even the string exist, 
     //am i missing any thing
    ?>

我弄错了,这是因为字符串中的@符号吗? 我不知道。谁能对此给出一个想法?

要在你的情况下使用array_search,你必须给出第一个参数,只是字符串 - 而不是数组:

$one = array('testing@example.com','example@example.com');
$two = array('testing@example.com');
var_dump(array_search('testing@example.com',$two));

然后它就会起作用。

如果要查找数组$one数组$two中的所有值,请使用array_intersect

$intersection = array_intersect('testing@example.com',$two);

然后检查是否找到简单的count

var_dump( count($intersection) > 0 );

0表示在 php 中falsearray_search返回数组键,您应该使用===运算符进行检查

 if(array_search($one,$two) !== false )
      // exists

警告 此函数可能返回布尔FALSE,但也可能返回 计算结果为 FALSE 的非布尔值。请阅读有关 布尔值以获取更多信息。使用=== operator测试 此函数的返回值。

参考

它应该是:

$one = array('testing@example.com','example@example.com');
$two = array('testing@example.com');
var_dump(array_search($two,$one));

参见:函数array_search

你可以反转

$one 

和 $two

 var_dump(array_search($two,$one));

试试这个:

<?php
    $one = array('testing@example.com','example@example.com');
    $two = array('testing@example.com');
    var_dump(in_array($two, $one)); // true
    // also, isset more fast in case when $two is string:
    $two = 'testing@example.com';
    var_dump(isset($one[$two])); // true

array_search中,它会检查第一个参数是否在第二个参数中。

array_search($one,$two)

您正在检查较小阵列中的较大数组。

您应该做的是检查较小的数组是否在较大的阵列中,如下所示

array_search($two,$one)