【问题标题】:Foreach inside for loop complicationforeach 内部 for 循环复杂化
【发布时间】:2013-01-27 13:49:50
【问题描述】:

我在另一个循环中遇到问题。我不知道如何处理这种情况,也没有得到预期的结果 - 我得到了预期的结果,但成倍增加

这是我的代码:

<div id="view">
    <?php 
    for ($i = 0; $i < sizeof($user_roll_array); $i++): 
        $roll_data =& $user_roll_array[$i];

        $roll_date = $roll_data['time'];
        $roll_ids  = $roll_data['image_ids'];
        $roll_ids  = explode('|', $roll_ids);
        $roll_key  = $roll_data['key'];

        foreach ($roll_ids as $image_id):
            $image_name = $image->get_name($image_id);

    ?>
    <div class="roll-spot">
        <?php echo $image_name; ?>
    </div>
    <?php endforeach; endfor; ?>
</div>

这是$user_roll_array 包含的内容:

Array
(
    [0] => Array
        (
            [id] => 1
            [user_id] => 1
            [image_ids] => 10|9
            [time] => 1359244752
            [key] => 8O0F5k8G9Y1H4b7
        )

    [1] => Array
        (
            [id] => 2
            [user_id] => 1
            [image_ids] => 13|12|11|10|9
            [time] => 1359245133
            [key] => n9G7v49E2Q5h0j7
        )

    [2] => Array
        (
            [id] => 3
            [user_id] => 1
            [image_ids] => 13|12
            [time] => 1359285360
            [key] => 2Q0t1Z3S2r7n5f9
        )

    [3] => Array
        (
            [id] => 4
            [user_id] => 1
            [image_ids] => 10|9
            [time] => 1359285377
            [key] => 4L6w6R2r2Q0c1g9
        )

    [4] => Array
        (
            [id] => 7
            [user_id] => 1
            [image_ids] => 10|9
            [time] => 1359288800
            [key] => 4t1X9P8l9H7C1F6
        )

)

基于我在 for 循环 中创建的数组,我需要遍历每个元素并通过方法 ($image-&gt;get_name($id)) 获取其名称。然后我需要在下面使用这些名称。

我希望返回 5 行,但我得到 13 行,并且名称重复了几次。

如果有人能解释如何解决这个问题,我会理解这个问题并防止将来发生类似的问题。

非常感谢。

【问题讨论】:

  • $user_roll_array 的内容是什么?
  • 你为什么不使用 foreach 循环而不是你的 for 循环?
  • @flec 这真的重要吗?我改为 foreach 一切都一样 - 所以基本上你没有回答我的问题。
  • hohner 的回答几乎解释了您所看到的行为,它可能仍然不是所需的行为,但如果您想要修复,您必须更清楚地说明您想要的输出是什么。您是否只想显示“唯一”的 image_id?

标签: php loops for-loop foreach nested


【解决方案1】:

您获得 13 个结果的原因是,虽然有 5 个顶级迭代,但您正在循环遍历 13 个子迭代(ID)。

如果您只想进行 5 次迭代,则不应在其中执行子循环。这是您的代码中让您感到困惑的部分:

<? foreach ($roll_ids as $image_id): ?>

   <? $image_name = $image->get_name($image_id); ?>
   <div class="roll-spot">
       <?php echo $image_name; ?>
   </div>

<?php endforeach;?>

这个 foreach 本身就在主循环中,并为每个 ID 可以访问的 div 回显一个 div。在主数组的生命周期中,这种情况会发生 13 次。您看到重复的原因是因为您有顶级数组元素,其中包含与其他元素相同的 ID。

【讨论】:

    【解决方案2】:

    去掉符号

    $roll_data =& $user_roll_array[$i];
    

    【讨论】:

    • 这得到了同样的结果。
    猜你喜欢
    • 2015-02-16
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    相关资源
    最近更新 更多