如何检查所有行是否都符合 PHP 中的条件

How to check if all rows match a criteria in PHP

我想检查所有行的某个字段是否符合条件。

因此,如果状态字段中的所有行都具有 'RUN' 作为值,则回显 "Success"。 如果有一行以 END 作为值,则 echo "Fail":

我猜我需要一个循环和一个 IF 语句? 我在想这样的事情,但它没有 return 任何东西:

while($source_row = mysqli_fetch_array($source_selection)){
    if ( ($source_row['Stat']) == ("Run" ) {
        echo "Success<br />";
    } else
        echo "Fail";
}

我不想回显每一行,我希望所有行都符合条件然后回显,如果不符合条件则也回显。

代码中有一些错误,您可以使用计数来匹配 -

$count = 0;
while($source_row = mysqli_fetch_array($source_selection)){
  if ($source_row['Stat'] == "Run" ) {
      $count++;
  }
}
if($count != mysqli_num_rows($source_selection)) {
  echo "Fail";
} else echo "Success";

试试这个

$success=true;
while($source_row = mysqli_fetch_array($source_selection)){
  if ( ($source_row['Stat']) != ("Run" ) {
    $success=false;
  }
}
if ($success) {
  echo "Success";
} else {
  echo "Fail";
}

这应该适合你:

首先,您必须使用 mysqli_fetch_all() 获取所有行。在此之后,我只提取带有 array_column() 的 Stat 列。然后我只是简单地 array_fill() 一个具有 X 值的数组,就像您在 $states 中具有值 "Run" 一样。并检查每个值是否相等。

$result = mysqli_fetch_all($source_selection, MYSQLI_ASSOC);
$states = array_column($result, "Stat");

if($states == array_fill(0, count($states), "Run")) {
    echo "Success";
} else {
    echo "Fail";
}

为了获得最佳性能,您可以直接在 SQL:

select count(*) from table where Stat <> 'Run'; 

然后测试返回值以检查是否大于零。

要用 php 做到这一点,您应该知道,当您发现错误时,您可以停止迭代。代码看起来像这样:

while($source_row = mysqli_fetch_array($source_selection)){
   if ( $source_row['Stat'] != "Run" ){
      $fail = true;
      break;
   }
}

if ($fail) {
  echo "Fail";
} else
  echo "Success";
}