Изменение формата многомерного массива в PHP - PullRequest
0 голосов
/ 07 июня 2011

Как я могу изменить первый массив как окончательный массив в PHP?

Array ( [0] => Array ( [month] => 2007-02 [clicks] => 94 ) 
        [1] => Array ( [month] => 2007-03 [clicks] => 6930 )
        [2] => Array ( [month] => 2007-04 [clicks] => 4 ) 
        ....
        [11] => Array ( [month] => 2008-01 [clicks] => 1008)
        [12] => Array ( [month] => 2008-02 [clicks] => 7 ) 
      )

Array ( [2007] => Array(
                        [0] => Array ( [month] => 1 [clicks] => 94 ) 
                        [1] => Array ( [month] => 2 [clicks] => 6930 )
                        [2] => Array ( [month] => 3 [clicks] => 4 )
                        ...
                       ),
        [2008] => Array(
                        [0] => Array ( [month] => 1 [clicks] => 1008) 
                        [1] => Array ( [month] => 2 [clicks] => 7 )
                       )
      )

Пожалуйста, помогите?

Ответы [ 2 ]

2 голосов
/ 07 июня 2011

Этот тип вещей выполняется вручную ... просто разбейте проблему и выполните ее.

$start = array();
$start[] = array("month"=>"2007-02","clicks"=>94);
$start[] = array("month"=>"2007-03","clicks"=>6930);
$start[] = array("month"=>"2007-04","clicks"=>4);
.....this is just for setup of testing.... 

$end = array();

foreach ($start as $record) {
    $keys = explode("-",$record['month']);
    $year = $keys[0];
    $month = $keys[1];
    if (!isset($end[$year])) $end[$year] = array();
    $end[$year][] = array("month"=>$month, "clicks"=>$record['clicks']);
}

var_dump($end);

Установите окончательный массив ($end в этом примере), а затем выполните циклначальный массив ($start в этом примере).Разбейте значение месяца, чтобы получить год и месяц.Проверьте, был ли год добавлен в окончательный массив, и если нет, то создайте его.Затем добавьте запись как новый массив, построенный из существующих значений.В конце у вас есть нужный формат.

0 голосов
/ 07 июня 2011
$newArray = array();
foreach($oldArray as $row) {
    list($year, $month) = explode($row['month']);
    $newArray[$year][(int)$month] = array( 
        'month' => (int)$month,  // this is in fact redundant - you have it in the index aleready
        'clicks' => $row['clicks'];
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...