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 :(得分: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");
这将迭代每个元素并将数组元素作为参数传递,并将使用您的自定义函数进行排序。
答案 1 :(得分: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");
答案 2 :(得分: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);
?>
它将按您定义的键对所有数组进行排序。
答案 3 :(得分:0)
Array multisort要求您构建一个数组,其中包含您要排序的键的值,以执行您想要的操作,但使用原始数组的相同第一个维键。
因此,如果你创建一个包含0 =&gt;的数组10,1 =&gt; 5 ...等等,这些是键0和1的str或def的值,那么你可以做
foreach($originalArray as $key => $record) {
$keyValuesArray[$key] = $record['str'];
}
array_multisort($keyvaluesArray, SORT_ASC, $originalArray);
原始数组将被修改为已排序。
至于你应该做什么,我不认为数组多重排序是“做到这一点的方式”,但这并不是一种糟糕的方式。其他解决方案可能会稍微提高效率。