2011-02-26 4 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

답변

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

어쩌면 내가 한 번 봐 가지고 질문에 대한 오해가 생겼으니 이제 자식 배열을 정렬하려고합니다. 이 경우, usort()를 사용하여 자식 배열을 정렬하려면 my cmp() 함수를 사용하십시오. –

+0

Thanks @Giuseppe. 당신의 기능은 내가 원하는 것처럼 작동합니다. –

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');