2

我想请你帮忙。我有一个 CSV 文件,其中存储了 4 个不同类别的值。( ABCD ) 我按日期顺序显示这些值,但是,我希望我的页面按它们的类别显示它们,然后按它们的日期对它们进行排序。

$_news_date 是存储日期的位置,$news_category 是存储类别的位置。

例如:我希望类别 A 是第一个,B 是第二个,C 是第三个,等等。比,如果我有 2 个项目作为 A,我希望这些项目按日期排序,所以最近的将在列表的顶部。这意味着 A 类项目将高于 B 类项目,即使它更旧。

  if (!count($news_headlines)>0){
            echo 'Nothing to display for the moment. ';
        }else{
            foreach ($news_headlines as $key => $item){
                list($news_id,$news_date,$news_title,$news_body,$news_category) = $item;
                $formatted_date = date('d.m.y',$news_date);


                if($news_category == 'A') {
                    $color = '#FF0000';
                    $weight = 'bold';
                }

                else if($news_category == 'B') {
                    $color = '#FF9900';
                    $weight = 'normal';
                }

                else if($news_category == 'C') {
                    $color = '#000000';
                    $weight = 'normal';
                }

                else {
                    $color = '#33CC33';
                    $weight = 'normal';
                }





                echo '<h2><p style="color: '.$color.'; font-weight: '.$weight.';">'.$formatted_date.' - '.$news_category.' - '.$news_title.'</p></h2>';
4

2 回答 2

1

非常简单的示例,假设已经从 CSV 文件中读取了这样的数组结构:

$array = array(
    array('category' => 'A', 'date' => 1364823620, ...),
    array('category' => 'B', 'date' => 1364823610, ...),
    ...
);

为简单起见,时间戳是 UNIX 时间戳。

usort($array, function (array $a, array $b) {
    static $categoryOrder = array('B', 'A', 'C'); // arbitrary preferred order

    $order = array_search($a['category'], $categoryOrder) - array_search($b['category'], $categoryOrder);
    if ($order !== 0) {
        // different categories, order by category
        return $order;
    }

    // same category, order by timestamp within category
    return $a['date'] - $b['date'];
});
于 2013-04-01T13:44:50.533 回答
1

首先你需要创建一个数组然后排序..试试这样的

      if (!count($news_headlines)>0)
      {
        echo 'Nothing to display for the moment. ';
      }
      else{
            $req_array = array();
            foreach ($news_headlines as $key => $item)
            {
              list($news_id,$news_date,$news_title,$news_body,$news_category) = $item;
              $formatted_date                                = date('d.m.y',$news_date);
              $req_array[]['id']                       = $news_id;
              $req_array[sizeOf($req_array)-1]['date'] = formatted_date;  
              $req_array[sizeOf($req_array)-1]['title'] = $news_tile;
              // similarly add othe values to this array
            }

            foreach($req_array as $key=>$value)
            {
                $category[] = $value['category'];
                $date[]     = $value['date'];   
            }
            $req_array = array_multisort($category,SORT_ASC,$date,SORT_DESC,$req_array);
           ----
          // rest code

现在 $req_array应该包含所需的数组..

于 2013-04-01T11:59:59.870 回答