2013-09-27 5 views
1

У меня есть многомерный массив в php, и я хочу сортировать его в соответствии с введенным временем, но я не могу так дать некоторые идеи.Как отсортировать многомерный массив в php

Array 
(
    [0] => Array 
     (
      [account_id] => 9 
      [entered] => 1369374812 
     ) 

    [1] => Array 
     (
      [account_id] => 9 
      [entered] => 1377587453 
     ) 

    [2] => Array 
     (
      [account_id] => 9 
      [entered] => 1373542381 
     ) 

    [3] => Array 
     (
      [account_id] => 9 
      [entered] => 1372988725 
     ) 

    [4] => Array 
     (
      [account_id] => 353 
      [entered] => 1380191316 
     ) 

    [5] => Array 
     (
      [account_id] => 9 
      [entered] => 1377587610 
     ) 
) 
+0

То же, как и все другие тысячи сортировки массива вопросов: либо usort() или array_multisort() –

ответ

0

Попробуйте это,

function aasort (&$array, $key) { 
    $sorter=array(); 
    $ret=array(); 
    reset($array); 
    foreach ($array as $ii => $va) { 
     $sorter[$ii]=$va[$key]; 
    } 
    asort($sorter); 
    foreach ($sorter as $ii => $va) { 
     $ret[$ii]=$array[$ii]; 
    } 
    $array=$ret; 
} 

aasort($your_array,"account_id"); 
+0

благодарит Рохан свою работу! Я хочу сортировать его «DESC», я пытаюсь изменить порядок сортировки, но он не работает должным образом после изменения порядка. – sandy

+0

Использовать 'asort (array_reverse ($ sorter));' вместо 'asort ($ sortter);' и try –

+0

Спасибо ROHAN его Работа я очень счастлив .. очень много .... – sandy

1

Вы можете сделать это с array_multisort

//in PHP 5.5: 
$rgOrder = array_column($rgData, 'entered'); 
array_multisort($rgOrder, SORT_ASC, $rgData); 

, если у вас есть PHP старше 5.5, то:

$rgOrder = array_map(function($rgItem) 
{ 
    return $rgItem['entered']; 
}, $rgData); 
array_multisort($rgOrder, SORT_ASC, $rgData); 

-Можно найти скрипку here. Если вы не хотите использовать array_multisort (так как она требует, чтобы создать временный массив первого), вы можете действовать как:

usort($rgData, function($rgX, $rgY) 
{ 
    return $rgX['entered']>$rgY['entered']?-1:$rgX['entered']!=$rgY['entered']; 
}); 

-Вот fiddle для него. Все образцы требуют, по крайней мере, PHP 5.3. В противном случае вам нужно использовать create_function для определения обратного вызова.

+0

привет Alma мой массив $ finalArray, и я хочу сортировать его в порядке DESC, но я не могу этого сделать с помощью кода, пожалуйста, помогите мне. и моя PHP-версия - 5.2.9, спасибо – sandy

+0

Тогда может быть это 'array_multisort ($ rgOrder, SORT_DESC, $ finalArray);'? ('$ rgOrder' генерируется таким же образом) –

+0

извините Алма, он не работает, я заменил $ rgData на $ finalArray, но его не работает – sandy

0

можно достичь с помощью сортировки usort

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
ini_set('log_errors', 0); 

function compare($a, $b) { 
     if ($a['entered'] == $b['entered']) { 
       return 0; 
     } 

     return ($a['entered'] < $b['entered']) ? -1 : 1; 
} 

$a = array(
     array('account_id' => 9, 'entered' => 1369374812), 
     array('account_id' => 9, 'entered' => 1377587453), 
     array('account_id' => 9, 'entered' => 1373542381) 
); 

usort($a, "compare"); 

print_r($a); 
?> 
Смежные вопросы