奇怪的PHP in_array问题使我绊倒了。不是PHP专家,但我有点精疲力尽,似乎无法掌握我可能会犯的语法或属性。
这就是我想要做的:
据我所知,下面的代码应该可以正常工作,但是奇怪的是,当我添加“ else”的那一刻,响应总是返回“ error”(例如,它从不输入if,否则每次都会重置)迭代到错误)。
如果我删除了for循环中的“ else”条件,则它按预期工作,但我需要捕获错误。还尝试了严格的比较,没有骰子!
感谢您的帮助!再次谢谢你。
$csv = array_map('str_getcsv', file($file,FILE_SKIP_EMPTY_LINES));
$keys = array_shift($csv);
foreach ($csv as $i=>$row) {
$csv[$i] = array_combine($keys, $row);
}
for ($j=0; $j<count($csv); $j++) {
if (in_array($code, $csv[$j])) {
$output = json_encode(array('type'=>'message', 'text' => 'Found'));
die($output);
}
else {
$output = json_encode(array('type'=>'error', 'text' => 'Not Found'));
die($output);
}
}
答案 0 :(得分:1)
您应该使用array_search在关联数组中按值查找,而不要像这样使用in_array
:
if (array_search($code, $csv[$j]))
答案 1 :(得分:1)
由于您在die()
和 if
块中都拥有一个else
,因此您的代码将仅测试第一个迭代,然后停止执行。这就是为什么当您省略else
时起作用的原因。
将其更改为:
for ($j=0; $j<count($csv); $j++) {
if (in_array($code, $csv[$j])) {
$output = json_encode(array('type'=>'message', 'text' => 'Found'));
die($output);
}
}
$output = json_encode(array('type'=>'error', 'text' => 'Not Found'));
die($output);
由于您在die()
块中有一个if
,因此,只有在if
块中的表达式永远不会为真时,才会执行循环后的任何代码。>
答案 2 :(得分:0)
您未在代码中定义$ code变量,而且您可以在代码中执行的操作是
if(!empty($code)&& in_array($code,$csv[$j])){
}
您需要检查$ code变量是否为空!