PHP in_array无法正常工作?

时间:2018-02-21 14:44:22

标签: php associative-array

我正在使用in_array()方法。如果读取的值已经在数组中,则应跳过该值并继续执行下一个值。如果当前值尚未在阵列上,则应将其推送到阵列。

这是我的代码:

while ($Result_Data_2 = mysqli_fetch_array($Result)){ //130 rows from database
      $Res_Array = array();
      $SQL_Result_Time = $Result_Data_2['Interpretation_Time'];

      /* Some statements here */

      if(in_array($SQL_Result_Time, $Res_Array, true)){
          break;
      }
      else{
          array_push($Res_Array, $Number, $SQL_Questionnaire_ID, $SQL_User_ID, $SQL_Psychology_FirstName, $SQL_Psychology_LastName, $SQL_Result_Date, $SQL_Result_Time);
      }
      echo "<pre>";print_r($Res_Array);echo "</pre>";
}

问题:它似乎忽略了我的条件if(in_array($SQL_Result_Time, $Res_Array, true)){break; }并仍将值插入数组中。它仍然复制数据

问题:

  1. 如何防止重复数据,如果在数组中找到当前值,它只会跳过语句并继续执行另一个值来检查数组等等?
  2. 检查数组上的值是否正确?

2 个答案:

答案 0 :(得分:2)

您正在while loop的每次迭代重新初始化数组。你应该在循环中声明它

$Res_Array = array();
while ($Result_Data_2 = mysqli_fetch_array($Result)){ //130 rows from database
      $SQL_Result_Time = $Result_Data_2['Interpretation_Time'];

      /* Some statements here */

      if(in_array($SQL_Result_Time, $Res_Array, true)){
          break;
      }
      else{
          array_push($Res_Array, $Number, $SQL_Questionnaire_ID, $SQL_User_ID, $SQL_Psychology_FirstName, $SQL_Psychology_LastName, $SQL_Result_Date, $SQL_Result_Time);
      }
      echo "<pre>";print_r($Res_Array);echo "</pre>";
}

另外,正如Marvin Fischer在回答中所提到的,您的break语句将终止第一个重复值的while loop。您应该使用continue

while ($Result_Data_2 = mysqli_fetch_array($Result)){ //130 rows from database
      ...
      if(in_array($SQL_Result_Time, $Res_Array, true)){
          continue;
      }
      ....
}

This question应澄清您对breakcontinue陈述的任何问题

答案 1 :(得分:0)

首先,在循环内部你应该使用continue,否则你取消整个循环,其次你在清除旧数据的每个循环开始时清空$Res_Array,插入新数据并再次回显它