2012-09-08 64 views
0

可能重複:
How do I sort a multidimensional array in phpPHP:排序多陣列結果

Array ([0] => Array ( 
        [card_name] => CardA 
        [str] => 10 
        [def] => 10 
        [desc] => - Recover 150 points of vitality 
           - Attack twice" 
        [qty] => 5 
       ) 
    [1] => Array ( 
        [card_name] => CardD 
        [str] => 40 
        [def] => 40 
        [desc] => - Investigate enemy's weakpoint 
        [qty] => 3 
       ) 
    [2] => Array ([card_name] => CardG 
        [str] => 35 
        [def] => 20 
        [desc] => 
        [qty] => 1 
       ) 
    [3] => Array ( 
        [card_name] => CardH 
        [str] => 25 
        [def] => 30 
        [desc] => 
        [qty] => 1 
       ) 
    [4] => Array ( 
        [card_name] => CardI 
        [str] => 15 
        [def] => 40 
        [desc] => - Enhance strength 
        [qty] => 1 
       ) 
    [5] => Array ( 
        [card_name] => CardJ 
        [str] => 5 
        [def] => 50 
        [desc] => - Make silence 
        [qty] => 3 
        ) 
    ) 

我對數組排序一個簡單的問題。我只想在str或def中對asc或desc中的數組進行排序。在php.net中的例子有點混亂,我想知道是否有人可以解決這個小難題。

我知道我應該使用array_multi_sort。

謝謝。

回答

0

使用usort功能。這將是你的情況是這樣的:

function compare($valueA, $valueB) { 
    if ($valueA['str'] > $valueb['str']) { 
     return 1; 
    } else if ($valueA['str'] < $valueb['str']) { 
     return -1; 
    } 
    return 0; 
} 

usort($yourArray, "compare"); 
0

地嘗試一下PHP usort - http://www.php.net/manual/en/function.usort.php

我還沒有嘗試和運行的代碼,但它會是下面的東西:

function cmp($a, $b) 
{ 
    return strcmp($a['def'],$b['def']) 
} 

$a = yourArray[]; 

usort($a, "cmp"); 

這將通過每個元素進行迭代,並通過數組元素作爲參數並將使用您的自定義函數進行排序。

0

usort()strnatcmp()是您的解決方案:

<?php 
    function build_sorter($key) { 
     return function ($a, $b) use ($key) { 
      return strnatcmp($a[$key], $b[$key]); 
     }; 
    } 

    usort($array, build_sorter('def')); 
    print_r($array); 
?> 

它將由您定義的鍵中的所有列進行排序。

0

數組多重排序要求您構建一個數組,其中包含要排序的鍵的值,以執行所需操作,但使用原始數組的相同第一維鍵。

因此如果使保持0 => 10的陣列,1 => 5 ...等,其中那些可用於STR或DEF鑰匙0和1的值,則可以做

foreach($originalArray as $key => $record) { 
    $keyValuesArray[$key] = $record['str']; 
} 

array_multisort($keyvaluesArray, SORT_ASC, $originalArray); 

原始數組將被修改爲排序。

至於你應該做什麼,我不認爲數組multisort是「做到這一點」的方式,但不是一個可怕的方式來做到這一點。其他解決方案可能稍微更有效。