如果数组是使用 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
这是因为值 admin
从 explode()
开始有前导 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 不起作用需要使用 trim
和 array_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)
首先,我将字符串更改为数组。当我尝试在该数组中搜索时,无法搜索第二个数组值。下面是我的代码。
//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
这是因为值 admin
从 explode()
开始有前导 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 不起作用需要使用 trim
和 array_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)