Манипулирование массивом PHP - PullRequest
0 голосов
/ 22 июля 2011

У меня есть следующий массив

Array
(
    [0] => Array
        (
            [reservation_time] => 08:30
            [user_name] => 
            [reason] => 
            [comments] => recursive
            [reservation_date] => 2011-07-14
        )

    [1] => Array
        (
            [reservation_time] => 09:00
            [user_name] => 
            [reason] => 
            [comments] => recursive
            [reservation_date] => 2011-07-14
        )

    [2] => Array
        (
            [reservation_time] => 09:30
            [user_name] => 
            [reason] => 
            [comments] => recursive
            [reservation_date] => 2011-07-14
        )

    [3] => Array
        (
            [reservation_time] => 08:30
            [user_name] => 
            [reason] => 
            [comments] => recursive
            [reservation_date] => 2011-07-15
        )

    [4] => Array
        (
            [reservation_time] => 09:00
            [user_name] => 
            [reason] => 
            [comments] => recursive
            [reservation_date] => 2011-07-15
        )

    [5] => Array
        (
            [reservation_time] => 09:30
            [user_name] => 
            [reason] => 
            [comments] => recursive
            [reservation_date] => 2011-07-15
        )

    [6] => Array
        (
            [reservation_time] => 08:30
            [user_name] => 
            [reason] => 
            [comments] => recursive
            [reservation_date] => 2011-07-16
        )

)

Мне нравится массив должен быть

Array(
 [2011-07-14] => Array
    (
            [0] => Array
                (
                    [reservation_time] => 08:30
                    [user_name] => 
                    [reason] => 
                    [comments] => recursive
                    [reservation_date] => 2011-07-14
                )

            [1] => Array
                (
                    [reservation_time] => 09:00
                    [user_name] => 
                    [reason] => 
                    [comments] => recursive
                    [reservation_date] => 2011-07-14
                )
    )
 [2011-07-15]  => Array
 ( 
    [0] => Array
        (
            [reservation_time] => 08:30
            [user_name] => 
            [reason] => 
            [comments] => recursive
            [reservation_date] => 2011-07-15
        )
)

Как я могу зациклить этот массив, чтобы получить желаемый результат

С уважениемNisanth

Ответы [ 4 ]

7 голосов
/ 22 июля 2011
$new_array = array();
foreach($array as $item) {
  $new_array[$item['reservation_date']][] = $item;
}
1 голос
/ 22 июля 2011

Иногда приятно получить многомерный массив, сгруппированный по подразделу - любому подразделу.Это в основном похоже на принятый ответ, но перегружает фактический массив:

print_r($array('reservation_date')); # group by subkey 'reservation_date'

Код ( Демо ):

$array = array(
  0 => array(
    'reservation_time' => '08:30',
    'user_name' => '',
    'reason' => '',
    'comments' => 'recursive',
    'reservation_date' => '2011-07-14',
  ),
  1 => array(
    'reservation_time' => '09:00',
    'user_name' => '',
    'reason' => '',
    'comments' => 'recursive',
    'reservation_date' => '2011-07-14',
  ),
  2 => array(
    'reservation_time' => '09:30',
    'user_name' => '',
    'reason' => '',
    'comments' => 'recursive',
    'reservation_date' => '2011-07-14',
  ),
  3 => array(
    'reservation_time' => '08:30',
    'user_name' => '',
    'reason' => '',
    'comments' => 'recursive',
    'reservation_date' => '2011-07-15',
  ),
  4 => array(
    'reservation_time' => '09:00',
    'user_name' => '',
    'reason' => '',
    'comments' => 'recursive',
    'reservation_date' => '2011-07-15',
  ),
  5 => array(
    'reservation_time' => '09:30',
    'user_name' => '',
    'reason' => '',
    'comments' => 'recursive',
    'reservation_date' => '2011-07-15',
  ),
  6 => array(
    'reservation_time' => '08:30',
    'user_name' => '',
    'reason' => '',
    'comments' => 'recursive',
    'reservation_date' => '2011-07-16',
  ),
);

// overload $array with a function
$array = function($key) use ($array) {
    $r = array();
    foreach($array as $v) 
        $r[$v[$key]][] = $v;
    return $r;
};

// request subkey per parameter:

print_r($array('reservation_date'));

print_r($array('reservation_time'));
0 голосов
/ 22 июля 2011

Из моего собственного кода PHP у меня есть функция для этого.Просто позвоните make_assoc_from_list($your_array, 'reservation_date'):

// makes associative array from normal list
//      - $list - list
//      - $key - key of each item which will be the associative key
//

function make_assoc_from_list($list, $key)
{
        $assoc = array();
        if ($list === null)
                $list = array();
        foreach ($list as $item)
                $assoc[$item[$key]] = $item;
        return $assoc;
}
0 голосов
/ 22 июля 2011
$new = array();
foreach ($array as $entry) {
    if (!array_key_exists($entry['reservation_date'], $new)) $new[$entry['reservation_date']] = array();
    $new[$entry['reservation_date']][] = $entry;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...