我正在使用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; }
并仍将值插入数组中。它仍然复制数据
问题:
答案 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应澄清您对break
和continue
陈述的任何问题
答案 1 :(得分:0)
首先,在循环内部你应该使用continue,否则你取消整个循环,其次你在清除旧数据的每个循环开始时清空$Res_Array
,插入新数据并再次回显它