如果使用explode()创建数组,则in_array()不再按预期工作

时间:2015-05-07 10:30:54

标签: php arrays string explode

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

el.attr("disabled", "true");
el.removeAttr("disabled");

但是当我尝试搜索类似下面的内容时,它会起作用。

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

3 个答案:

答案 0 :(得分:4)

这是因为值admin具有explode()的前导空格! 如果你这样做,你可以看到:

var_dump($arr);

输出:

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

要解决此问题,只需将trim()array_map()结合使用到每个数组值,如下所示:

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

答案 1 :(得分:2)

是的,第一个无法正常工作,因为您可以看到admin之前需要使用trimarray_map之前的额外空格{1}}检查结果前的功能

$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)

答案 2 :(得分:1)

你有一个像这样的字符串数组: 你字符串:

$a = 'normal, admin';

使用爆炸后会出现这样的阵列:

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

我的意思是说您在管理员中有一个空格,这就是为什么不在in_array函数中搜索管理员。

解决方案:在使用爆炸之前使用此功能:

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