【问题标题】:PHP array split into small arraysPHP数组拆分成小数组
【发布时间】:2015-09-10 21:34:28
【问题描述】:

我有不同月份和年份的数组。我想按月和年分开

$array = array(
    '2013-01-01' => 3432,
    '2013-01-04' => 321,
    '2013-01-12' => 343,
    '2013-01-03' => 321,
    '2013-01-15' => 421,
    '2013-02-03' => 123,
    '2013-02-11' => 343,
    '2013-02-13' => 332,
    '2013-03-03' => 123,
    '2013-04-11' => 343,
    '2013-04-13' => 332,
    '2013-04-11' => 343,
    '2013-04-13' => 332,
    '2014-02-13' => 332,
    '2014-02-03' => 123,
    '2014-02-11' => 343,
    '2015-05-13' => 332,
    '2015-05-11' => 343,
    '2015-05-10' => 132,
    '2015-05-13' => 312
);

我想像它一样拆分成更小的数组

$array1 = array(
    '2013-01-01' => 3432,
    '2013-01-04' => 321,
    '2013-01-12' => 343,
    '2013-01-03' => 321,
    '2013-01-15' => 421,
);

$array2 = array(
    '2013-02-03' => 123,
    '2013-02-11' => 343,
    '2013-02-13' => 332,
);

$array3 = array(
    '2013-03-03' => 123,
);

$array4 = array(
    '2013-04-11' => 343,
    '2013-04-13' => 332,
    '2013-04-11' => 343,
    '2013-04-13' => 332,
);

我有按月和按年排列的。

我怎样才能用 PHP 做到这一点?

【问题讨论】:

标签: php arrays


【解决方案1】:

使用二维数组。第一个维度是年月,这些值是子数组。

$new_array = array();
foreach ($array as $date => $value) {
    $parts = explode('-', $date);
    $year_month = $parts[0].'-'.$parts[1];
    if (!isset($new_array[$year_month])) {
        $new_array[$year_month] = array();
    }
    $new_array[$year_month][$date] = $value;
}
var_dump($new_array);

DEMO

【讨论】:

    【解决方案2】:

    我在那里进行的排序毫无意义,因为数组正在下面排序。

    然后使用循环进行迭代。这将产生一个包含 $datesArr[years][months] 的多维数组 $datesArr。有了这个,您可以简单地拆分整个数组或使用完整的索引数组。

     $datesArr = array();
     $curYear = null;
     $curMonth = null;
     foreach ($array as $arrKey => $arrVal){
         $thisYr = date('Y', strToTime($arrKey));
         $thisMo = date('m', strToTime($arrKey));
         if (!isset($datesArr[$thisYr])){
             $curYear = $thisYr;
             $datesArr[$thisYr] = array();
         }
         if (!isset($datesArr[$thisYr][$thisMo])){
             $curMonth = $thisMo;
             $datesArr[$thisYr][$thisMo] = array();
         }
         $datesArr[$curYear][$curMonth][$arrKey] = $arrVal;
     }
    print_r($datesArr);
    

    我已经测试了这段代码,它完全按照我说的那样做,哈哈。如果您有任何问题,请回复我!

    祝你好运!

    【讨论】:

    • 谢谢!我能够在上面的答案中使用 Barmar 代码的逻辑来解决我的问题。感谢您在这方面的时间和帮助!谢谢!
    猜你喜欢
    • 2011-02-21
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2015-11-26
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多