2010-12-16 71 views
0

我有一個多維數組,如以下幾點:PHP排序基於離線或在線

[Jack] => Array 
    (
     [GCF] => Array 
      (
       [Name] => Jack 
       [retrieved] => cache 
      ) 
     [PF] => Array 
      (
       [lastSeen] => Fri, 03 Dec 2010 23:48:14 GMT 
       [online] => 0 
      ) 
    ) 
... More users here in the same format 

從這個我想在數組中,以便在線用戶首先顯示排序,但我想PHP不如果可能的話修改數組或其任何鍵。

任何人有關於如何做到這一點的任何想法?

感謝。

回答

0
$users = <input array> 

$online = $offline = array(); 
foreach ($users as $name => $data) { 
    if ($data['PF']['online']) { 
    $online[$name] = $data; 
    } else { 
    $offline[$name] = $data; 
    } 
} 

$sorted = array_merge($online, $offline); 
1
function array_sort($array, $on, $order='SORT_DESC') 
    { 
     $new_array = array(); 
     $sortable_array = array(); 

     if (count($array) > 0) { 
      foreach ($array as $k => $v) { 
       if (is_array($v)) { 
        foreach ($v as $k2 => $v2) { 
         if ($k2 == $on) { 
          $sortable_array[$k] = $v2; 
         } 
        } 
       } else { 
        $sortable_array[$k] = $v; 
       } 
      } 

      switch($order) 
      { 
       case 'SORT_ASC':  
        echo "ASC"; 
        asort($sortable_array); 
       break; 
       case 'SORT_DESC': 
        echo "DESC"; 
        arsort($sortable_array); 
       break; 
      } 

      foreach($sortable_array as $k => $v) { 
       $new_array[] = $array[$k]; 
      } 
     } 
     return $new_array; 
    }