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

我有以下数据结构:


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 值。


哆啦的时光机
浏览 98回答 1
1回答

慕桂英3389331

您需要做的第一件事是根据您可以使用的制造商对数组进行排序usort,按值对没有制造商的条目进行排序id。然后你可以遍历汽车,检查制造商是否与前一辆汽车相同,如果是,则输出一个新<div>元素并关闭前一个(如果需要):// sort based on manufacturerusort($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 - GolfID: 4 - PassatID: 5 - Toureg</div><div class="container id2">ID: 2 - FocusID: 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 上的演示
打开App,查看更多内容
随时随地看视频慕课网APP