提问者:小点点

在输出中打印分组数组键


我有这段代码用于按大小对数组关键数据进行分组:

$result = array();
foreach ($productInfo as $element) {
    $result[$element['size']][] = $element;
}

并使用我的代码生成此分组数组:

Array
(
    [14] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 1
                    [name] => test
                )

            [1] => stdClass Object
                (
                    [id] => 2
                    [name] => another name
                )

        )

    [6] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 3
                    [name] => name 3
                )

        )

    [4] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 4
                    [name] => name 4
                )

        )

)

我可以使用以下代码显示密钥名称:

<?php foreach($products as $key => $product):?>
  <h5> <?= $key; ?> </h5>
<?php endforeach;?>

但是,我需要用html显示输出,如下所示:

<h5> 14 </h5>
<span> test </span>
<span> another name </span>

<h5> 6 </h5>
<span> name 3 </span>

<h5> 4 </h5>
<span> name 4 </span>

我怎么才能生成这个?!

编辑:

这是我的ProductInfo:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => test
            [size] => 14
        )

    [1] => stdClass Object
        (
            [id] => 2
            [name] => another name
            [size] => 14
        )

    [2] => stdClass Object
        (
            [id] => 3
            [name] => name 3
            [size] => 6
        )

    [3] => stdClass Object
        (
            [id] => 4
            [name] => name 4
            [size] => 4

        )

)

共3个答案

匿名用户

对于未显示的原始$ProductInfo数组,这可能是一种更简单的方法,但这将用于当前数组。 只需从当前$product中提取所有name值,然后implode它们:

<?php foreach($products as $key => $product): ?>
  <h5> <?= $key; ?> </h5>
  <span> <?= implode('</span><span>', array_column($product, 'name')); ?> </span>
<?php endforeach; ?>

需要PHP>=7,array_column才能处理对象,或者使用它来代替array_column:

array_map(function($o) { return $o->name; }, $product)

匿名用户

请尝试以下操作:

<?php foreach ($productInfo as $key => $element): ?>

  <h5><?= $element['size'] ?></h5>
  
  <?php foreach ($element as $index => $value): ?>
    
    <span><?= $value->name ?></span>

  <?php endforeach ?>

<?php endforeach ?>

如果您的$ProductInfo如下所示:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => test
            [size] => 14
        )

    [1] => stdClass Object
        (
            [id] => 2
            [name] => another name
            [size] => 14
        )

    [2] => stdClass Object
        (
            [id] => 3
            [name] => name 3
            [size] => 6
        )

    [3] => stdClass Object
        (
            [id] => 4
            [name] => name 4
            [size] => 4

        )

)

然后可以循环遍历每个对象并打印所需的值,如下所示:

<?php foreach ($productInfo as $key => $element) : ?>

  <h5><?= $element->size ?></h5>
  <span><?= $element->name ?></span>

<?php endforeach ?>

匿名用户

你需要两个周期。 假设您的数组:

foreach ($result as $id => $items) {

    echo '<h5> ' . $id . ' </h5>';

    foreach ($items as $product) {
        echo '<span>' . $product['name'] . '</span>';
    }
}