在 foreach/switch 中添加不可重复的行

Add a non-repeatable line inside a foreach/switch

我有这个循环,它显示了一年中的书籍:

foreach ($cases_result as $case) {
    $i = $case->n_ano;
    switch ($i) {

        case $i >= 2013:
            echo $case->book.'<br>';
            break;

        case $i <= 2012 && $i >= 2011:
            echo $case->book.'<br>';
            break;
        case $i <= 2010 && $i >= 2009:
            echo $case->book.'<br>';
            break;
        case $i <= 2008 && $i >= 2007:
            echo $case->book.'<br>';
            break;
    }

}

是否可以添加不可重复的行来分隔每个案例?

我需要显示年份,像这样:

2013
 - book 1
 - book 2
2012
 - book 3
 - book 4

这是数组的摘录:

array (size=22)
  0 => 
    object(stdClass)[14]
      public 'book' => string 'book 1' (length=6)
      public 'n_ano' => string '2013' (length=4)
  1 => 
    object(stdClass)[15]
      public 'book' => string 'book 2' (length=6)
      public 'n_ano' => string '2013' (length=4)
  2 => 
    object(stdClass)[16]
      public 'book' => string 'book 3' (length=6)
      public 'n_ano' => string '2012' (length=4)

首先,按 n_ano 对数组进行排序。然后您可以轻松地遍历排序结果并创建分组输出。

function sortCases($a, $b) {
    return $a->n_ano < $b->n_ano;
}

usort($cases_result, "sortCases");

$out = '';
$i = 0;
foreach ($cases_result as $case) {

    //If the year is different, print year and assign it so $i
    if($i !== intval($case->n_ano)) {
        $out .= '<h2>' . $case->n_ano . '</h2>';
        $i = intval($case->n_ano);
    }

    $out .= $case->book . '<br>';
}

print $out;

这应该适合你:

首先我创建一个数组,它使用年份作为键并将书名添加到数组中,这样您就可以简单地循环它,例如

<?php

    foreach($arr as $v)
            $data[$v->n_ano][] = $v->book;

    foreach($data as $n_ano => $books) {
        echo $n_ano . "<br>";
        foreach($books as $book)
            echo " - " . $book . "<br>";
    }

?>

输出:

2013
 - book 1
 - book 2
2012
 - book 3