2013-04-02 12 views
12

के मूल्यों रखने मैं एक सरणी है कि इस तरह दिखता है:क्रमबद्ध सरणी और चाबी

Array 
(
    [team1] => Array 
     (
      [points] => 10 
      [players] => Array 
       (
        ... 
       ) 
     ) 

    [team2] => Array 
     (
      [points] => 23 
      [players] => Array 
       (
        ... 
       ) 
     ) 

    ... many more teams 
) 

और मैं अंक प्रत्येक टीम है की संख्या से टीमों को सॉर्ट करना चाहते हैं। मैं इस की कोशिश की है:

function sort_by_points($a,$b) 
{ 
    if ($a['points']==$b['points']) return 0; 
     return ($a['points']<$b['points'])?1:-1; 
} 

usort($this->wordswithdata, "sortbycount"); 

लेकिन उस दृष्टिकोण teamnames और रिटर्न युक्त कुंजी ओवरराइड करता है:

Array 
(
    [0] => Array 
     (
      [points] => 23 
      [players] => Array 
       (
        ... 
       ) 
     ) 

    [1] => Array 
     (
      [points] => 10 
      [players] => Array 
       (
        ... 
       ) 
     ) 

    etc... 
) 

वहाँ सरणी कुंजी के रूप में teamnames अधिलेखन बिना सरणी सॉर्ट करने के लिए कोई तरीका है?

उत्तर

19

उपयोग => मूल्य संघों बरकरार।

(ओर ध्यान दें: आप भारतीय विदेश सेवा के बजाय return $a['points'] - $b['points'] कर सकते हैं)

-1

इस कोड को आज़माएं उम्मीद है कि यह काम करेगा। uasort समारोह, कि कुंजी रखना चाहिए

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,"points"); 
12

आप उपयोग कर सकते हैं uasort:

uasort($array, function($a, $b) { 
    return $a['points'] - $b['points']; 
}); 

यह समारोह एक सरणी सॉर्ट करता ऐसी है कि सरणी सूचकांक के साथ अपने संबंध को बनाए रखने के उपयोगकर्ता परिभाषित तुलना फ़ंक्शन का उपयोग करके वे सरणी तत्वों से जुड़े होते हैं।

संबंधित मुद्दे