【问题标题】:A good fast way to redefine the structure of an array重新定义数组结构的好方法
【发布时间】:2014-11-13 17:05:29
【问题描述】:

我有一个如下所示的数组:

    Array (
       [0] => Array
          (
              [id] => 1
              [day] => 12
              [month] => 10
              [year] => 2014
              [event_title] => numbwe1
              [event] => trip to this place unknown
          )

    [1] => Array
        (
            [id] => 2
            [day] => 16
            [month] => 10
            [year] => 2014
            [event_title] => number2
            [event] => trip to this other place unknown
        )
    ) 

我想让它看起来像这样

Array (
    [2014] => Array (
        [10] => Array (
            [1] => Array(
                [0] => Array(
                [event_title] = numbwe1
                [event] = trip to this place unknown
                )
            )

            [2] => Array(
                [0] => Array(
                [event_title] = number2
                [event] = trip to this other place unknown
                )
            )
        )
    )
)

我不知道是因为它迟到了,还是因为它很复杂,但我无法理解它。任何人都有任何想法。

目的是我希望能够根据年份 => 月份 => 日期 =>

选择所有事件

例如。 $events[2014] 给出了今年的所有事件。

$events[2014][11] 给出了本月的所有事件。

$events[2014][11][13] 提供当天的所有事件。

也欢迎其他解决方案。

【问题讨论】:

    标签: php arrays codeigniter activerecord


    【解决方案1】:
    $newArray = array();
    foreach ($array as $a) {
        $year = $a['year'];
        $month = $a['month'];
        $day = $a['day'];
        if (!isset($newArray[$year])) $newArray[$year] = array();
        if (!isset($newArray[$year][$month])) $newArray[$year][$month] = array();
        if (!isset($newArray[$year][$month][$day])) $newArray[$year][$month][$day] = array();
        $newArray[$year][$month][$day][] = $a; // No sense stripping out useful information
    }
    

    【讨论】:

    • 因为,简单的解决方案,我一直盯着这个看几个小时,你用 16 秒赢了乔纳森。所以你得到了加分。
    • ps。您错过了第 6 行中的 a ) 和第 11 行中的 [] ,除了它就像一个魅力。非常感谢!
    • @Magic-Mouse 谢谢,我已经编辑了 - 对错别字感到抱歉 - 这就是我快 16 秒的结果哈哈。还要感谢您抓住这一点,而不是进行典型的复制/粘贴并抱怨代码在不理解的情况下无法工作;)
    【解决方案2】:

    这应该可行。警告:未测试

    function createDateSortableArray($array) {
        $sortableArray = [];
        foreach ($array as entry) {
            $year = $entry['year'];
            $month = $entry['month'];
            $daty = $entry['day'];
            if (!isset($sortableArray[$year])) {
                $sorableArray[$year] = [];
            }
    
            if (!isset($sortableArray[$year][$month])) {
                $sortableArray[$year][$month] = [];
            }
    
            if (!isset($sortableArray[$year][$month][$day]) {
                $sortableArray[$year][$month][$day] = [];
            }
    
            $sortableArray[$year][$month][$day][] = array(
                'event_title' => $entry['event_title'],
                'event' => $entry['event']
            );
        }
    
        return $sortableArray;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-12
      • 2021-04-21
      • 2016-03-29
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多