2011-02-26 52 views
0

我需要帮助。我有这样的功能:PHP:排序排列

function getFriendsUploadActivity($user_id, $limit){ 
    $res = $this->exec(
     "SELECT bimg.hash,bimg.image_id,bimg.user_id,bimg.time,img_v2.server,img_v2.loc,img_v2.newname,img_v2.name FROM bimg 
     LEFT JOIN img_v2 ON bimg.image_id = img_v2.id 
     WHERE bimg.user_id IN (SELECT subscription FROM subscribes WHERE subscriber = '$user_id') 
     AND img_v2.protected = '0' 
     OR bimg.user_id = '$user_id' 
     ORDER BY bimg.time DESC" 
    ); 
    while($r = mysql_fetch_array($res)){ 
     $hash[$r['hash']][] = $r; 
    } 

    $res2 = $this->exec(
     "SELECT * FROM sets WHERE sets.user_id IN (SELECT subscription FROM subscribes WHERE subscriber = '$user_id') 
     OR sets.user_id = '$user_id' 
     ORDER BY sets.time DESC" 
    ); 
    while($r2 = mysql_fetch_array($res2)){ 
     $hash[$r2['name']][] = $r2; 
    } 

    return $hash; 
} 

该函数返回数组是这样的:

Array 
(
    [5ddf] => Array 
     (
      [0] => Array 
       (
        [0] => 5ddf 
        [hash] => 5ddf 
        [1] => 18778 
        [image_id] => 18778 
        [2] => 4 
        [user_id] => 4 
        [3] => 1295556514 
        [time] => 1295556514 
       ) 

     ) 
    [d6e4] => Array 
     (
      [0] => Array 
       (
        [0] => d6e4 
        [hash] => d6e4 
        [1] => 18631 
        [image_id] => 18631 
        [2] => 4 
        [user_id] => 4 
        [3] => 1295556512 
        [time] => 1295556512 
       ) 
      [1] => Array 
       (
        [0] => d6e4 
        [hash] => d6e4 
        [1] => 18630 
        [image_id] => 18630 
        [2] => 4 
        [user_id] => 4 
        [3] => 1295556510 
        [time] => 1295556510 
       ) 
     ) 

    [lorem ipsum] => Array 
     (
      [0] => Array 
       (
        [0] => 33 
        [id] => 33 
        [1] => lorem ipsum 
        [name] => lorem ipsum 
        [2] => 42 
        [user_id] => 42 
        [3] => 0 
        [type] => 0 
        [4] => 233324 
        [time] => 1295745642 
       ) 

     ) 
    [bla bla] => Array 
     (
      [0] => Array 
       (
        [0] => 2 
        [id] => 2 
        [1] => bla bla 
        [name] => bla bla 
        [2] => 4 
        [user_id] => 4 
        [3] => 0 
        [type] => 0 
        [4] => 233324 
        [time] => 1295745632 
       ) 

     ) 

) 

现在从$ RES2结果在数组的末尾添加。我需要按[时间]值排序子数组。因此,通过这种方式,我的主数组中的所有数组都将按照我可以从[时间]值得到的时间进行排序。

+0

看看在array_multisort – knittl 2011-02-26 15:22:51

回答

3

你可以做下面几行内容:

function cmp($a,$b) { 
    $timea = $a[0]['time']; 
    $timeb = $b[0]['time']; 
    if ($timea == $timeb) 
     return 0; 
    return ($timea < $timeb)? -1:1; 
} 
uasort($hash, 'cmp'); 
+0

也许我误解了这个问题,我现在看到你想要排序子数组。在这种情况下,只需使用我的cmp()函数使用usort() – 2011-02-26 15:28:27

+0

对子数组进行排序,谢谢@Giuseppe。它的功能就像我想要的那样工作。 – 2011-02-27 08:45:32

2

它可以通过uasort和你自己的比较函数来完成:

function maxValueOfArray($array) { 
    $max = NULL; 

    foreach ($array as $subarray) { 
     if (array_key_exists("time", $subarray)) { 
      continue; 
     } 

     if ($max === NULL || $max < $subarray["time"]) { 
      $max = $subarray["time"]; 
     } 
    } 

    return $max; 
} 

function cmpFunc($a, $b) { 
    $ma = maxValueOfArray($a); 
    $mb = maxValueOfArray($b); 

    if ($ma == $mb) { 
     return 0; 
    } 

    return ($ma < $mb) ? -1 : 1; 
} 

uasort($res, 'cmpFunc');