2015-09-10 3 views
-1

У меня есть массив с разными месяцами и годами. Я хочу разделить на месяц и годPHP массив разбит на небольшие массивы

$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?

+0

Связанный: [Разделение массива дат в зависимости от месяца или года] (http://stackoverflow.com/q/9233122) – mario

ответ

1

Используйте 2-мерный массив. Первым измерением является год-месяц, и эти значения являются субмассивами.

$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

+0

Спасибо! Это действительно помогло мне на правильном пути! – Ismail

0

Сортировка, что я был там не имеет смысла, поскольку массив сортируется ниже.

Затем повторите процедуру, используя петлю. Это создаст многомерный массив $ dateArr, который будет содержать $ dateArr [years] [months]. С этим вы можете просто разбить весь массив или использовать полный индексированный массив.

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

Я проверил этот код, и он делает точно, как я сказал, lol. Если у вас есть вопросы, удари меня!

Удачи вам!

+0

Спасибо! Я смог решить свою проблему, используя логику кода Бармара в приведенном выше ответе. Я ценю ваше время и помощь в этом отношении! Спасибо! – Ismail

Смежные вопросы