【问题标题】:in_array() doesn't work anymore as expected if the array is created with explode()如果使用 explode() 创建数组, in_array() 将不再按预期工作
【发布时间】:2015-05-07 10:30:53
【问题描述】:

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

//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

【问题讨论】:

    标签: php arrays string explode


    【解决方案1】:

    这是因为值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);
    

    【讨论】:

    • $arr = array_amp("trim", $arr); is$arr = array_map("trim", $arr); ?这是工作。谢谢
    【解决方案2】:

    是的,第一个不起作用,因为您可以看到在您的 admin 之前有一个额外的空间将不起作用,需要在检查结果之前使用 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)
    

    【讨论】:

    • @SetKyarWaLar 您可以接受这些答案之一,这将使该答案被视为已解决。谢谢。
    【解决方案3】:

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

    $a = 'normal, admin';
    

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

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

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

    解决方法:在使用explode之前使用这个功能:

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

    【讨论】:

      猜你喜欢
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多