首页 > 解决方案 > 如果带有 Foreach 的语句没有遍历 foreach

问题描述

我的代码有问题 - 对 PHP 来说相当新,所以任何指针都将不胜感激。

我有以下代码

foreach(findCustomAlerts($customerid) as $key=>$value){

    echo "ID : ".$rifdid = $value['Catid']."<br>";
    echo "Visits required per day : ".$visitsneeded= $value['Visits required']."<br>";
  
}

foreach(getTodaysVisits($device_id) as $rfid){
    foreach($rfid as $key=> $read){
 
        if($key ==$rifdid && $read < $visitsneeded) {  
            echo"<br>". $key." has not visited enough";
       
         }
    
    }

}

但它没有遍历 foreach - 它只是拾取第一个值然后停止:

ID: 1005
Visits required per day : 3
ID : 2089
Visits required per day : 5

2089 has not visited enough

这是 foreach 应该迭代的数组:

Array
(
    [rfid_id] => Array
        (
            [2089] => 1
            [1005] => 3
        )

)

我尝试将变量放入以计算迭代次数,如下所示:

$i = 0;

foreach(getTodaysVisits($device_id) as $rfid){
    foreach($rfid as $key[$i]=> $read){
 
        if($key[$i] ==$rifdid && $read < $visitsneeded) {  
            echo"<br>". $key[$i]." has not visited enough";
            $i++;
        }
    
    }

}

但它给了我以下错误:

Warning: Cannot use a scalar value as an array 
Notice: Trying to access array offset on value of type int in

所以不确定最好的行动方案是什么,非常感谢任何建议。

标签: phparraysif-statementforeach

解决方案


这看起来像您在第一个 for-each 循环中收到的结构findCustomAlerts($customerid)不是您所期望的,但是警告没有给出行号,所以我可能是错的。

在您的代码中,您有一个$key未使用的,然后$value您将其视为一个数组。

您收到的警告消息告诉我们,您不能将标量(或单数)值类型用作数组。然后我们会收到一条通知,告诉我们当我们尝试将它用作数组时,偏移量'Catid''Visits required'不可用,可能是由于相同的原因。$value根据您显示的数组示例(1,3),我怀疑更可能是整数类型。

var_dump()在函数的输出上运行 a findCustomAlerts,我想你会更好地理解这个问题。


推荐阅读