2015-03-19 2 views
-2

Я хочу сортировать следующий многомерный массив на основе даты с использованием php.Сортировка многомерного массива

$arr = Array(
[13] => Array 
    (
     [0] => '2015-03-19 07:30 AM', 
     [1] => '2015-03-19 11:30 AM', 
     [2] => '2015-03-19 03:30 PM', 
     [3] => '2015-03-19 07:30 PM', 
     [4] => '2015-03-19 09:30 PM' 
    ), 
    [14] => Array 
    (
     [0] => '2015-03-19 07:30 AM', 
     [1] => '2015-03-19 04:30 PM', 
     [2] => '2015-03-19 09:30 PM', 
     [3] => '2015-03-20 07:30 AM', 
     [4] => '2015-03-20 04:30 PM', 
     [5] => '2015-03-20 09:30 PM' 
    ) 
); 

Я хочу, чтобы конечный результат/результат массива, как,

arr[13][0] => '2015-03-19 07:30 AM' 
arr[14][0] => '2015-03-19 07:30 AM' 
arr[13][1] => '2015-03-19 11:30 AM', 

.. likewise. 

ключи важны для меня (13 и 14 являются мед идентификаторами и 0,1 являются schdule идентификаторами).

Может ли кто-нибудь помочь?

+1

Глядя на ваш ожидаемый результат, я думаю, что у вас есть фундаментальное непонимание, как массивы работают –

ответ

1

Глядя на ваш ожидаемый результат, я думаю, что у вас есть фундаментальное непонимание того, как работают массивы. Вы не можете чередовать различные уровни многомерного массива

Try реструктуризации вашего массива в структуре, которая может быть использована более легко:

$arr = array(
    13 => array(
     0 => '2015-03-19 07:30 AM', 
     1 => '2015-03-19 11:30 AM', 
     2 => '2015-03-19 03:30 PM', 
     3 => '2015-03-19 07:30 PM', 
     4 => '2015-03-19 09:30 PM' 
    ), 
    14 => array(
     0 => '2015-03-19 07:30 AM', 
     1 => '2015-03-19 04:30 PM', 
     2 => '2015-03-19 09:30 PM', 
     3 => '2015-03-20 07:30 AM', 
     4 => '2015-03-20 04:30 PM', 
     5 => '2015-03-20 09:30 PM' 
    ) 
); 

$newArr = array(); 
foreach($arr as $med_id => $v1) { 
    foreach($v1 as $sched_id => $v2) { 
     $newArr[] = (object) array(
      'med_id' => $med_id, 
      'sched_id' => $sched_id, 
      'appointment' => $v2 
     ); 
    } 
} 

Затем вы можете отсортировать его с помощью

usort(
    $newArr, 
    function($a, $b) { 
     return strtotime($a->appointment) > strtotime($b->appointment); 
    } 
); 
var_dump($newArr); 

Demo

+0

Великий solution..that был идеальным решением ... –

0

Отличное решение по Mark..that было идеальным решением ...

Альтернативное решение, в котором я использовал преобразованный массив в один размер, используя med id и sch ID, используемый asort.

$arr = array(
'13_0' => strtotime('2015-03-19 07:30 AM'), 
'13_1' => strtotime('2015-03-19 11:30 AM'), 
'13_2' => strtotime('2015-03-19 03:30 PM'), 
'13_3' => strtotime('2015-03-19 07:30 PM'), 
'13_4' => strtotime('2015-03-19 09:30 PM'), 

'14_0' => strtotime('2015-03-19 07:30 AM'), 
'14_1' => strtotime('2015-03-19 04:30 PM'), 
'14_2' => strtotime('2015-03-19 09:30 PM'), 
'14_3' => strtotime('2015-03-20 07:30 AM'), 
'14_4' => strtotime('2015-03-20 04:30 PM'), 
'14_5' => strtotime('2015-03-20 09:30 PM') 
); 
asort($arr); 
Смежные вопросы