PHP in_array()关联数组问题

时间:2018-08-03 04:55:02

标签: php arrays ajax

奇怪的PHP in_array问题使我绊倒了。不是PHP专家,但我有点精疲力尽,似乎无法掌握我可能会犯的语法或属性。

这就是我想要做的:

  • 获取CSV文件,将其转换为关联数组
  • 在数组中查找代码。我从简单的表单提交中获得了一个动态变量。
  • 发送“消息”响应以确认代码是否存在,否则发送“错误”响应

据我所知,下面的代码应该可以正常工作,但是奇怪的是,当我添加“ 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);
    }
}

3 个答案:

答案 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变量是否为空!