3

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

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

$fields = array('Host', 'OS', 'Event Id');
$aliases = array('idEvent' => 'Event ID');

 foreach ($aliases as $actual => $alias){

    $alias = strtolower($alias);

    echo "searching fields(" . implode(',', array_map('strtolower', $fields)) . ") for $alias<br/>";
    if ($position = array_search($alias, array_map('strtolower', $fields)) !== FALSE) {

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

    }
}

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

4

3 回答 3

6

if问题在于语句的操作顺序。赋值运算符的优先级低于比较运算符,并且赋值是从右边开始计算的。所以添加一些括号:

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

我发现这更容易阅读:

if (in_array($alias, array_map('strtolower', $fields))) {
于 2013-08-08T13:52:23.170 回答
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;

    }
于 2013-08-08T13:57:55.503 回答
0
array_search($alias, array_map('strtolower', $fields)) !== FALSE

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

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

于 2013-08-08T13:53:45.597 回答