【问题标题】:If Statement with Foreach not iterating through foreach如果带有 Foreach 的语句没有遍历 foreach
【发布时间】:2021-01-18 22:36:27
【问题描述】:

我的代码有问题 - 对 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

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

【问题讨论】:

  • 请确认getTodaysVisits($device_id)返回的内容。

标签: php arrays if-statement foreach


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:
      $query = $mysqli->prepare("SELECT * FROM table_name WHERE status =:id");
        $query->execute(['id' => $solved]);
        foreach($query as $row)
        {
        
        $value_seeking1 = $row['0'];
        $value_seeking2 = $row['1'];
        echo "$value_seeking1 blah blah blah <br />";
        echo "$value_seeking2 blah blah blah";
    }
    

    【讨论】:

    • 虽然这段代码可以回答这个问题,但最好在不介绍其他代码的情况下解释它是如何解决问题的,以及为什么要使用它。从长远来看,纯代码的答案没有用处。
    猜你喜欢
    • 1970-01-01
    • 2019-12-01
    • 2012-06-20
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2012-06-22
    • 1970-01-01
    相关资源
    最近更新 更多