为了账号安全,请及时绑定邮箱和手机立即绑定

显示按键分组的元素中的数组值

显示按键分组的元素中的数组值

PHP
哆啦的时光机 2023-05-26 17:29:33
我有以下数据结构:Array(    [0] => stdClass Object        (            [id] => 1            [title] => Golf            [manufacturer] => 1        )    [1] => stdClass Object        (            [id] => 2            [title] => Focus            [manufacturer] => 2        )    [2] => stdClass Object        (            [id] => 3            [title] => Jazz            [manufacturer] =>         )    [3] => stdClass Object        (            [id] => 4            [title] => Passat            [manufacturer] => 1        )    [4] => stdClass Object        (            [id] => 5            [title] => Toureg            [manufacturer] => 1        )    [5] => stdClass Object        (            [id] => 6            [title] => Galaxy            [manufacturer] => 2        ))我想这样显示它:<div class="container id1">    ID: 1 - Golf    ID: 4 - Passat    ID: 5 - Toureg</div><div class="container id2">    ID: 2 - Focus    ID: 6 - Galaxy</div><div class="container">    ID: 3 - Jazz</div>所以我的视图代码将输出我尝试这样做的上述数组:foreach ($cars as $car){    echo '<div class="container">';    if ($car->manufacturer) {        echo '</div>';        echo '<div class="container id'. $car->manufacturer .'">';        echo $car->id . ' - ' . $car->title;        echo '</div>';    } else {        echo '</div>';        echo '<div class="container">';        echo $car->id . ' - ' . $car->title;        echo '</div>';    }}但这会输出几个空<div class="container"></div>元素,而且只有<div class="container">ID: 1 - Golf</div>, 不像所需的输出。如何使用此数组获得所需的输出?请注意,Jazz 没有制造商集,因此<div>类不应该有 idX 集,其中 X 是制造商的 ID 值。
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

您需要做的第一件事是根据您可以使用的制造商对数组进行排序usort,按值对没有制造商的条目进行排序id。然后你可以遍历汽车,检查制造商是否与前一辆汽车相同,如果是,则输出一个新<div>元素并关闭前一个(如果需要):

// sort based on manufacturer

usort($cars, function ($a, $b) { 

    if (!$a->manufacturer) {

        // if both null, sort by id

        if (!$b->manufacturer) return $a->id - $b->id;

        // otherwise sort null values last

        return 1;

    }

    if (!$b->manufacturer)

        // sort null values last

        return -1;

    return $a->manufacturer - $b->manufacturer;

});


$lastmfg = 0;

foreach ($cars as $car) {

    if (!$car->manufacturer || $car->manufacturer != $lastmfg) {

        if ($lastmfg !== 0) echo "</div>\n";

        echo '<div class="container'. ($car->manufacturer ?  ' id' . $car->manufacturer : '') .'">'. "\n";

    }

    echo 'ID: ' . $car->id . ' - ' . $car->title . "\n";

    $lastmfg = $car->manufacturer;

}

echo "</div>\n";

输出(用于扩展演示):


<div class="container id1">

ID: 1 - Golf

ID: 4 - Passat

ID: 5 - Toureg

</div>

<div class="container id2">

ID: 2 - Focus

ID: 6 - Galaxy

</div>

<div class="container id3">

ID: 9 - Phoenix

</div>

<div class="container">

ID: 3 - Jazz

</div>

<div class="container">

ID: 7 - Falcon

</div>

<div class="container">

ID: 8 - Commodore

</div>

<div class="container">

ID: 10 - Cressida

</div>

3v4l.org 上的演示


查看完整回答
反对 回复 2023-05-26
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信