2011-03-22 6 views
0

가능한 중복 :
Sorting an associative array in PHP배열을 정렬하는 PHP 코드 .....?

모두 안녕하세요,

<?php 
    $data[] = array('id' => 67, 'hits' => 2); 
    $data[] = array('id' => 86, 'hits' => 1); 
    $data[] = array('id' => 85, 'hits' => 6); 
    $data[] = array('id' => 98, 'hits' => 2); 
    $data[] = array('id' => 89, 'hits' => 6); 
    $data[] = array('id' => 65, 'hits' => 7); 
?> 

같은 배열을 가지고 그리고 난에 sort에 근거하여이 배열을 원하는

hits.

도와 몇 가지 코드를 제안하십시오 ....

미리 감사드립니다 다음 비교 기능

+1

당신이 복사 붙여 넣기 [PHP 워드 프로세서]에서 (인 질문을 이유는 무엇입니까 http://php.net/manual/ en/function.array-multisort.php) (예 # 3) * 및 *에는 이미 해결책이 있습니까? – jensgram

답변

1

usort() :

function cmpHits($a, $b) { 
    return $a['hits'] - $b['hits']; 
} 

(테스트되지 않은, uasort() 경우 키 연관성을 유지하려고합니다.)

2

usort() 함수가 필요합니다 - 사용자 정의 비교 함수를 지정할 수 있습니다. http://php.net/manual/en/function.usort.php을 참조하십시오.

내 비교 기능은 예를 들어 함수 CMP ($ A, $의 b) { 복귀 strcasecmp 수 있었다 ($ A [ '판'], $ B 형 [ '판']); }

-1

이 시도 :

array_multi_sort($data, array('edition'=>SORT_DESC)); 

function array_multi_sort($array, $cols) 
{ 
    $colarr = array(); 
    foreach($cols as $col => $order) 
    { 
     $colarr[$col] = array(); 
     foreach ($array as $k => $row) 
     { 
      $colarr[$col]['_'.$k] = strtolower($row[$col]); 
     } 
    } 

    $eval = 'array_multisort('; 
    foreach($cols as $col => $order) 
    { 
     $eval .= '$colarr[\''.$col.'\'],'.$order.','; 
    } 
    $eval = substr($eval,0,-1).');'; 
    eval($eval); 
    $ret = array(); 
    foreach($colarr as $col => $arr) 
    { 
     foreach($arr as $k => $v) 
     { 
      $k = substr($k,1); 
      if (!isset($ret[$k])) $ret[$k] = $array[$k]; 
      $ret[$k][$col] = $array[$k][$col]; 
     } 
    } 
    return $ret; 
} 

리소스 : http://php.net/manual/en/function.array-multisort.php

+1

eval을 사용하는 것은 필요하지 않습니다! – fire

관련 문제