Php 数组搜索未按预期工作

Php 数组搜索未按预期工作,php,Php,我试图用映射到$alias数组中(idEvent)的值替换$fields数组中的值事件Id,但PHP的数组搜索函数返回了错误的位置。注意:我正在将值转换为所有小写,因此它应该返回一个匹配项,看起来array\u search正在返回索引,但它应该返回索引2,而不是索引1,因为它是$fields数组中的第三个值 不幸的是,如果您运行代码(例如,复制并粘贴到此处:),它将返回错误的值。有人能告诉我我做错了什么吗 $fields = array('Host', 'OS', 'Event Id'); $

我试图用映射到
$alias
数组中(idEvent)的值替换
$fields
数组中的值事件Id,但PHP的
数组搜索
函数返回了错误的位置。注意:我正在将值转换为所有小写,因此它应该返回一个匹配项,看起来
array\u search
正在返回索引,但它应该返回索引
2
,而不是索引
1
,因为它是
$fields
数组中的第三个值

不幸的是,如果您运行代码(例如,复制并粘贴到此处:),它将返回错误的值。有人能告诉我我做错了什么吗

$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;

    }
}
$fields=array('Host','OS','Event Id');
$alias=array('idEvent'=>'Event ID');
foreach($actual=>$alias的别名){
$alias=strtolower($alias);
echo“搜索$alias的字段(“.introde(”,“,array_map('strtolower',$fields))”)”;
if($position=array\u search($alias,array\u map('strtolower',$fields))!==FALSE){
echo“$别名位于\$fields[$position]”;
$fields[$position]=$actual;
}
}

编辑:我添加了一些echo语句,以便您可以了解我正在尝试执行的操作。

问题在于
if
语句的操作顺序。赋值运算符的值大于比较运算符的值,赋值从右开始计算。因此,添加一些括号:

if (($position = array_search($alias, array_map('strtolower', $fields))) !== FALSE) {
我觉得这更容易阅读:

if (in_array($alias, array_map('strtolower', $fields))) {
这是真的,对吗?然后它转换为
$position=1
,因此您可以看到,他找到了键,但实际上返回了相等的值


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

$position
将获得赋值1,因为这是将
数组搜索与!==错误

使用左侧的测试修复问题

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

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

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

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

    }