繁体   English   中英

如果条件与foreach循环在php中的数组

[英]if condition with foreach loop for array in php

有什么办法可以阻止这个重复的数据。

if ($employees_csa[0]->csa_taken == 2 && $employees_csa[1]->csa_taken == 2 && $employees_csa[2]->csa_taken == 2 && $employees_csa[3]->csa_taken == 2 && $employees_csa[4]->csa_taken == 2 && $employees_csa[5]->csa_taken == 2 && $employees_csa[6]->csa_taken == 2 && $employees_csa[7]->csa_taken == 2) {
          echo "data";
    }

我试过这样for key range(0 , 8)

foreach (range(0, count($employees_csa)) as $number) {
                        
    if ($employees_csa[$number]->csa_taken == 2) {
            echo "data";
                           
      }
   }

我试过这种方式没有取得任何成功。 我可以用另一种方式来写简单的条件。

您可以循环使用开箱即用的数组:

$all_taken = true;
foreach ($employees_csa as $employee) {
    if ($employee->csa_taken != 2) {
        $all_taken = false;
        break;
    }
}
if ($all_taken) {
    echo 'data';
}

另一种方法是array_reduce()但这不会在已经有答案时中止循环:

$all_taken = array_reduce($employees_csa, function ($all_taken, $employee) {
    if ($employee->csa_taken != 2) {
        return false;
    }
    return $all_taken;
}, true);
if ($all_taken) {
    echo 'data';
}

或者,你可以做这样的使用array_column撤出所有csa_taken属性,然后降低到1个项目,如果它们都具有相同的array_unique() ,然后检查相同的值是预期数量的2复位() 。

$csa_taken = array_column($employees_csa, 'csa_taken');

if (reset($csa_taken) === 2 && count(array_unique($csa_taken)) === 1) {
    echo 'data';
}

可复用功能版本: https : //3v4l.org/4kYiE

一个简单的 for 循环可以工作

$condition_met=true;

for($i=0;$i<8;++$i){
  if( $employees_csa[$i]->csa_taken != 2){
  $condition_met=false;
  break;
  }
}
if($condition_met===true){
   //success
   }
else{
   //fail
   }

一个简单的方法可以做到像

foreach($employees_csa as $singleEmployee){
    if($singleEmployee->csa_taken == 2){
        echo "data";
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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