如果关键字是变量,则找不到php数组关键字


php array key not found if key is a variable

我认为这不应该发生,但我不明白为什么这不起作用。我正在检查用户输入是否有重复的选择。$into_fields_count是一个数据库字段数组,映射到用户选择的次数(db字段=>计数),$into_fields_dupes收集重复项。

    foreach ( $into_fields_count as $field => $count )
    {
        if ( $count > 1 ) $into_fields_dupes[$field] = $count;
    }
    if ( $into_fields_dupes )
    {
        // construct error message
        $error = ERR_MAP_DUPLICATES;
        foreach ( $into_fields_dupes as $field => $count )
        {
            $error .= "'n" . 'Datenbankfeld "' .  $artikel_fields[$field] . '" wurde ' . $count . ' mal gewählt.';
        }
        $error .= "'nBitte korrigieren Sie den Fehler vor dem Import!";
        throw new Exception($error);
    }

问题是在两个foreach数组中使用相同的变量$field。在第二个循环中,尝试获取$artikel_fields[$field]的值会弹出通知

Notice: Undefined index: bestell_nr in /my/file/path...

然而,在这段代码之后对$artikel_fields['bestell_nr']进行测试确实找到了关键。显然,变量在有问题的行中包含正确的字符串。

通过在第二个循环中更改变量名,我可以很容易地解决这个问题,但我想了解一下这里发生了什么。你能告诉我为什么代码不起作用吗?

上述问题具有误导性。在数组中查找关键字的问题不是在两个foreach循环中使用了相同的变量名;原因是搜索到的键无意中加了一个空格字符作为前缀,并且在调试时没有看到额外的空格。

这个问题的答案可能是:如果出现这样一个模糊的"错误",请检查您正在搜索的密钥中是否有隐藏字符。事实上,@Marc B在第一条评论中回答了这个问题。

我将保持标题不变,以便其他有此问题的人能够找到解决方案。

根据Marc B和Magic Lasso的出色建议,您还可以使用PHP函数trim从字符串中删除空白字符。这里有一个链接,指向trim上的PHP手动条目。

此外,您可以使用此方法的一个分支来修剪字符串开头的空白:ltrim

或者,您可以使用以下方法修剪字符串末尾的空白:rtrim