简体   繁体   中英

PHP in_array not working properly?

I'm working on in_array() method. If the value read is already in the array it should be skipped and proceed to the next value. If the current value is not on the array yet, it should be pushed to the array.

here's my code:

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>";
}

Problem: It seems that it ignores my condition which is if(in_array($SQL_Result_Time, $Res_Array, true)){break; } if(in_array($SQL_Result_Time, $Res_Array, true)){break; } and still inserts the value into the array. It still duplicates data

Question:

  1. How to prevent the duplication data where if the current value was found inside the array it would just skip the statement and proceed to another value for checking the array and so on?
  2. Is my logic on checking the value on the array is right?

You are re-initialising your array on every iteration of the while loop . You should declare it outside of the 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>";
}

Also, as mentioned by Marvin Fischer in his answer, your break statement will terminate the while loop on the first duplicated value. You should instead use 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 should clarify any issues you have with break and continue statements

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM