数组搜索未按预期工作

时间:2013-08-08 13:48:31

标签: php

我正在尝试将$fields数组中的值事件ID 替换为{{1}中映射到( idEvent )的值数组,但PHP的$aliases函数返回错误的位置。注意:我正在将值转换为所有小写,因此它应该返回一个匹配,似乎array_search正在返回索引,但它应该返回索引array_search而不是索引{{1}因为它是2数组中的第三个值。

不幸的是,如果您运行代码(例如,将其复制并粘贴到此处:http://writecodeonline.com/php/),则会返回错误的值。有人可以告诉我,如果我做错了吗?

1

编辑:我添加了一些echo语句,这样你就可以做我想做的事了。

3 个答案:

答案 0 :(得分:6)

这是问题的if语句的操作顺序。赋值运算符比比较运算符具有lower precedence,并且首先从右侧计算赋值。所以添加一些括号:

if (($position = array_search($alias, array_map('strtolower', $fields))) !== FALSE) {

我觉得这更容易阅读:

if (in_array($alias, array_map('strtolower', $fields))) {

答案 1 :(得分:0)

array_search($alias, array_map('strtolower', $fields)) !== FALSE

这是对的吗?然后它转换为$position = 1,因此你看到它找到了关键的一个,但实际上返回了相等的值......

使用括号或预先存储搜索值。

答案 2 :(得分:0)

$position的分配值为1,因为它是比较array_search to !== FALSE

的结果

使用左侧的测试来解决问题。

if (false !== ($position = array_search($alias, array_map('strtolower', $fields)))) {

        echo "$alias was found at {$fields[$position]}";
        $fields[$position] = $actual;

    }