循环遍历数组并回显具有相同ID的所有子数组

时间:2016-07-25 22:06:50

标签: php arrays

这是简化版本,我有一个数组填充项目,有时可能有重复

$items = array(
    array(
        'id' => 1,
        'title' => 'Item 1'
        ),
    array(
        'id' => 2,
        'title' => 'Item 2'
        ),
    array(
        'id' => 3,
        'title' => 'Item 3'
        ),
    array(
        'id' => 1,
        'title' => 'Item 1'
        ),
    array(
        'id' => 3,
        'title' => 'Item 1'
        ),
    array(
        'id' => 5,
        'title' => 'Item 5'
        ),
    array(
        'id' => 3,
        'title' => 'Item 1'
        ),
    );
?>

我需要的是浏览每个项目并回显它的标题但是如果阵列中有更多具有相同ID的项目,我需要按当前项目回显它们的标题并稍后跳过它们。

<ul>
    <?php foreach($items as $item) : ?>
        <li>
            <?php echo $item['title']; ?> 
            <?php // check for other items and echo their titles if they are same
        </li>
    <?php endforeach; ?>
</ul>

最后,这个例子应该像这样出现

<li>Item 1 Item 1</li>
<li>Item 2</li>
<li>Item 3 Item 3 Item 3</li>
<li>Item 5</li>

关于如何解决它而不弄乱的任何想法? :)

我正在玩这样的东西,某处与双线相呼应......一般都不好

<?php $int = 0; ?>
<?php foreach($items as $item) : ?>
    <li>
        <?php 
        echo $item['title']; 
        $id = $item['id'];
        unset($items[$int]);
        $int++;

        foreach($items as $item_second) {
            if($item_second['id'] === $id) {
                echo $item_second['title'];
                unset($item_second);
            }
        }
        ?>
    </li>
<?php endforeach; ?>

1 个答案:

答案 0 :(得分:2)

在渲染成二维数组之前准备数组怎么样? 它看起来像这样:

<?php
    $itemsForRender = array();

    foreach ($items as $item) {
        if (!isset($itemsForRender[$item['id']])) {
            $itemsForRender[$item['id']] = [];
        }

        $itemsForRender[$item['id']][] = $item['title'];
    }
?>

之后很容易:

<?php foreach($itemsForRender as $items) : ?>
    <li>
        <?php echo implode(' ', $items); ?>
    </li>
<?php endforeach; ?>