如果数组是使用 explode() 创建的,in_array() 将不再像预期的那样工作

in_array() doesn't work anymore as expected if the array is created with explode()

首先,我将字符串更改为数组。当我尝试在该数组中搜索时,无法搜索第二个数组值。下面是我的代码。

//my string
$a = 'normal, admin';
//Change string to array
$arr = explode(",",$a);
// Search by array value
dd(in_array("admin", $arr)); //got false

但是当我尝试搜索如下内容时,它起作用了。

//my string
$a = 'normal, admin';
//Change string to array
$arr = explode(",",$a);
// Search by array value
dd(in_array("normal", $arr)); //got true

这是因为值 adminexplode() 开始有前导 space! 如果你这样做,你可以看到这个:

var_dump($arr);

输出:

array(2) {
  [0]=>
  string(6) "normal"
  [1]=>
  string(6) " admin"
       //^   ^ See here
}

现在要解决这个问题,只需将 trim() combined with array_map() 应用于每个数组值,如下所示:

$arr = array_map("trim", $arr);

你有一个来自字符串的数组,如下所示: 你的字符串:

$a = 'normal, admin';

使用 explode 之后会出现这样的数组:

$arr = array('normal',' admin');

我的意思是说您在管理员中有一个 space,这就是为什么不在 in_array 功能中搜索管理员。

解决方法:在使用爆炸之前使用这个函数:

$newstr = str_replace(" ", "", $a);
$arr = explode(',',$newstr);

是的,第一个不起作用,因为你可以看到在你的 admin 之前有一个额外的 space 不起作用需要使用 trimarray_map函数检查结果

$a = 'normal, admin';
//Change string to array

$arr = array_map('trim',explode(",",$a));
// Search by array value
var_dump($arr);
var_dump(in_array("admin", $arr));

输出:

array(2) { [0]=> string(6) "normal" [1]=> string(5) "admin" } bool(true)