【问题标题】:Warning (2): Invalid argument supplied for foreach()警告 (2):为 foreach() 提供的参数无效
【发布时间】:2012-03-05 11:29:29
【问题描述】:

我有以下数组结构,并且我使用 for each 循环成功地循环了 [LoyaltyHistory] ​​部分:

Array
(
    [0] => Array
        (
            [LoyaltyHistory] => Array
                (
                    [id] => 5
                    [user_id] => 32
                    [points] => 4
                    [date] => 2012-02-07
                    [total] => 146
                )

            [User] => Array
                (
                )

        )

    [1] => Array
        (
            [LoyaltyHistory] => Array
                (
                    [id] => 6
                    [user_id] => 32
                    [points] => -6
                    [date] => 2012-02-07
                    [total] => 140
                )

            [User] => Array
                (
                )

        )

    [2] => Array
        (
            [LoyaltyHistory] => Array
                (
                    [id] => 7
                    [user_id] => 32
                    [points] => -5
                    [date] => 2012-02-07
                    [total] => 135
                )

            [User] => Array
                (
                )

        )

    [3] => Array
        (
            [LoyaltyHistory] => Array
                (
                    [id] => 8
                    [user_id] => 32
                    [points] => 15
                    [date] => 2012-02-07
                    [total] => 150
                )

            [User] => Array
                (
                )

        )

    [4] => Array
        (
            [LoyaltyHistory] => Array
                (
                    [id] => 9
                    [user_id] => 32
                    [points] => 5
                    [date] => 2012-02-10
                    [total] => 155
                )

            [User] => Array
                (
                )

        )

    [5] => Array
        (
            [LoyaltyHistory] => Array
                (
                    [id] => 10
                    [user_id] => 32
                    [points] => 155
                    [date] => 2012-03-04
                    [total] => 305
                )

            [User] => Array
                (
                )

        )

    [6] => Array
        (
            [LoyaltyHistory] => Array
                (
                    [id] => 11
                    [user_id] => 32
                    [points] => -5
                    [date] => 2012-03-04
                    [total] => 300
                )

            [User] => Array
                (
                )

        )

    [7] => Array
        (
            [LoyaltyHistory] => Array
                (
                    [id] => 12
                    [user_id] => 32
                    [points] => 5
                    [date] => 2012-03-05
                    [total] => 305
                )

            [User] => Array
                (
                )

        )

)

for each 循环的结构如下:

<?php foreach ($history as $hist) 
    {
       if($hist['LoyaltyHistory']['points'] > 0) $hist['LoyaltyHistory']['points'] = '+'.$hist['LoyaltyHistory']['points'];?>
                                <tr>
                                    <td><?php echo $hist['LoyaltyHistory']['date']; ?></td>
                                    <td><?php echo $hist['LoyaltyHistory']['points']; ?></td>
                                    <td><?php echo $hist['LoyaltyHistory']['total']; ?></td>
                                </tr>
                    <?php   } ?>

for each 循环从数组中输出正确的元素,但它会导致以下警告:'Warning (2): Invalid argument supplied for foreach()',我不知道为什么。

【问题讨论】:

  • 可能是因为您使用$history 作为循环变量,但在循环内调用$h
  • 很好,忘记将引用从 $h 更新为 $hist,将对原始帖子进行修改。不幸的是,这不是导致问题的原因。
  • 我用你的数据试过你的例子,它工作正常。尝试定义您在哪个周期后收到此警告

标签: php foreach warnings


【解决方案1】:

这个错误主要发生在foreach接收到的参数不是数组的时候。 尝试在之前添加var_dump($history)。您的一条记录必须有一个空值而不是一个空数组。

【讨论】:

  • var_dump 给出的输出与初始帖子中 print_r 的输出相同。如您所见,所有“LoyaltyHistory”元素都有一个值。
  • 但是您的 foreach 不是循环通过 LoyaltyHistory 数组,而是通过您的主数组。你能告诉我们更多代码吗?
  • 我知道你的意思,但最初的帖子中的清单显示了整个数组结构,每个数组元素都有数据。我不确定其他代码会有所帮助。唯一相关的其他代码在控制器中: $conditions = array("user_id" => $id); $this->set('history', $this->LoyaltyHistory->find('all', array('conditions' => $conditions)));那就是填充 $history 数组并将值传递给 VIEW。
  • 好吧,这可能是一个愚蠢的问题,但你确定这个警告是由这个 foreach 引发的吗?
  • 我不需要关联的用户数组,所以我使用 $this->LoyaltyHistory->recursive = -1; 将其从“LoyaltyHistory”数组中删除。现在对于每个功能都可以,感谢您的建议,问题已解决
猜你喜欢
  • 2017-06-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多