如何从数组PHP创建嵌套列表

时间:2013-07-17 18:45:07

标签: php arrays list nested

我有一份奖项列表,我想按年份分组和列出。我能够列出这些项目,但是没有成功嵌套它们。

///// ARRAY

Array
(
[0] => Array
    (
        [Award] => Array
            (
                [id] => 5
                [order] => 4
                [publish] => 1
                [year] => 2015
                [title] => Test Award #5
                [copy] => Duis aute irure dolor in reprehenderit.
                [slug] => test-award-5
            )

    )

[1] => Array
    (
        [Award] => Array
            (
                [id] => 4
                [order] => 3
                [publish] => 1
                [year] => 2014
                [title] => Test Award #4
                [copy] => Duis aute irure dolor in reprehenderit.
                [slug] => test-award-4
            )

    )

[2] => Array
    (
        [Award] => Array
            (
                [id] => 1
                [order] => 0
                [publish] => 1
                [year] => 2013
                [title] => Test Award #1
                [copy] => Duis aute irure dolor in reprehenderit.
                [slug] => test-award-1
            )

    )

[3] => Array
    (
        [Award] => Array
            (
                [id] => 2
                [order] => 1
                [publish] => 1
                [year] => 2013
                [title] => Test Award #2
                [copy] => Duis aute irure dolor in reprehenderit.
                [slug] => test-award-2
            )

    )

)

//// CONTROLLER

class AwardsRecognitionController extends AppController {

var $name = 'Award';

/*****
    PUBLIC
*****/
function index(){

   $awards=$this->Award->find('all', array(
          'conditions'=>array('publish'=>1),
          'order'=>array('Award.year DESC')
       ));

       $this->set('awards', $awards);

}

//// VIEW

    <div id="award_container">

<?php
    echo "<ul>";

    foreach($awards as $award){
        echo "

            <li class='award' style='color:black;'>

                <strong>".$award['Award']['year']."</strong>

                <span class='award_title'>".$award['Award']['title']."</span>

                <p>".$award['Award']['copy']."</p>
            </li>

        ";
    }
 ?>
</div>

我要做的是将数据输出到这样的嵌套列表中。

2015
    Test Award #5
2014
    Test Award #4
2013
    Test Award #2
    Test Award #1

欢迎任何帮助!谢谢!

2 个答案:

答案 0 :(得分:0)

$array = [your existing array];

$n = array();
foreach($array as $a) {
    $year = $a['Award']['year'];
    if(!isset($n[$year])) { $n[$year] = array(); }
    $n[$year][] = $a['Award'];
}

// now you have a new array $n looking like this

print_r($n);

ksort($n); // sort array by key

// and you can walk through it

foreach($n as $year => $awards) {
    echo $year."<br>";
    foreach($awards as $aw) {
        echo $aw['title']."<br>";
    }
}

答案 1 :(得分:0)

$new = array();
foreach ($awards as $key => $award){
    $new[$award['Award']['year']][] = $award['Award'];
}
var_dump($new);

输出:

Array(
    [2015] => Array(
            [0] => Array(
                    [id] => 5
                    [order] => 4
                    [publish] => 1
                    [year] => 2015
                    [title] => Test Award #5
                    [copy] => Duis aute irure dolor in reprehenderit.
                    [slug] => test-award-5
                )
        )
    [2014] => Array(
            [0] => Array(
                    [id] => 4
                    [order] => 3
                    [publish] => 1
                    [year] => 2014
                    [title] => Test Award #4
                    [copy] => Duis aute irure dolor in reprehenderit.
                    [slug] => test-award-4
                )
        )
    [2013] => Array(
            [0] => Array(
                    [id] => 1
                    [order] => 0
                    [publish] => 1
                    [year] => 2013
                    [title] => Test Award #1
                    [copy] => Duis aute irure dolor in reprehenderit.
                    [slug] => test-award-1
                )
            [1] => Array(
                    [id] => 2
                    [order] => 1
                    [publish] => 1
                    [year] => 2013
                    [title] => Test Award #2
                    [copy] => Duis aute irure dolor in reprehenderit.
                    [slug] => test-award-2
                )
        )
)