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

时间:2011-06-16 17:14:19

标签: php arrays

我认为这不应该发生,但我找不到为什么这不起作用。我正在检查用户输入是否有重复的选择。 $into_fields_count是映射到用户选择的次数的数据库字段数组(db field => count),$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);
    }

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

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

但是,在此代码之后测试$artikel_fields['bestell_nr']确实找到了密钥。显然,变量在可疑行中包含正确的字符串。

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

2 个答案:

答案 0 :(得分:0)

根据Marc B和Magic Lasso的优秀建议,您还可以使用PHP函数trim从字符串中删除空白字符。 Heretrim上的PHP手册条目的链接。

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

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

答案 1 :(得分:0)

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

问题的答案可能是:如果发生这种模糊的“错误”,请检查您要搜索的密钥中的隐藏字符。实际上@Marc B在第一条评论中回答了这个问题。

我将按原样保留标题,以便有此问题的其他人可以找到解决方案。