我认为这不应该发生,但我不明白为什么这不起作用。我正在检查用户输入是否有重复的选择。$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