如果needle是第一项,则in_array仅返回true

时间:2014-04-23 12:19:31

标签: php arrays

我有以下名为$fields的数组:

array(3) {
  [0]=>
  string(9) "groupName"
  [1]=>
  string(9) " userName"
  [2]=>
  string(3) " id"
}

但是,当我运行此代码时:

if(in_array("groupName", $fields))
            echo "yes - groupName";

if(in_array("id", $fields))
            echo "yes - id";

输出:

  

是 - groupName

无法理解我在这里做错了什么

3 个答案:

答案 0 :(得分:6)

$fields数组中,您有第三个值idid字符串的开头有一个空格。所以in_array("id", $fields)失败了。它适用于:

in_array(" id", $fields)

您应该遍历$fields数组并修剪其值。例如array_map

$fields = array_map(function($field){ return trim($field); }, $fields);

或:

$fields = array_map(trim, $fields);

array_walk

array_walk($fields, function(&$field){ $field = trim($field); });

输出:

array (size=3)
  0 => string 'groupName' (length=9)
  1 => string 'userName' (length=8)
  2 => string 'id' (length=2)

测试:

var_dump(in_array("id", $fields));

结果:

boolean true

答案 1 :(得分:3)

因为你在数组元素中有空格;

array(3) {
  [0]=>
  string(9) "groupName"
  [1]=>
  string(9) " userName"
  [2]=>
  string(3) " id"
}

更正后的代码:

array(3) {
  [0]=>
  string(9) "groupName"
  [1]=>
  string(9) "userName" // Remove space after "
  [2]=>
  string(3) "id" // Remove space after "
}

答案 2 :(得分:1)

你的数组值“id”中有一个空格,这就是为什么它与“id”不匹配 你应该使用trim(http://www.php.net/manual/en/function.trim.php),以便在插入/检查之前从字符串的结尾和开头删除空格。