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


How to creat a nested list from an array PHP

我有一份我想分组并按年度列出的奖项列表。我可以列出项目,但嵌套它们失败了。

/////阵列

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
            )
    )
)

////控制器

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);
}

////查看

    <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

欢迎任何帮助!谢谢

$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>";
    }
}
$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
                )
        )
)