【发布时间】:2015-12-10 23:35:17
【问题描述】:
Array opareas
(
[0] => Array
(
[name] = => array('opname1')
[subcats] => Array
(
[0] => Array
(
[amount] => 9883
[perc] => 112.61394712853236
)
[1] => Array
(
[amount] => 1
[perc] => 0.011394712853236098
)
[2] => Array
(
[amount] => 3679
[perc] => 41.921148587055605
)
)
)
[1] => Array
(
[name] = => array('opname2')
[subcats] => Array
(
[0] => Array
(
[amount] => 12166
[perc] => 56.8584380987989
)
[1] => Array
(
[amount] => 1473
[perc] => 6.884142636818245
)
[2] => Array
(
[amount] => 955
[perc] => 4.463242510632331
)
[3] => Array
(
[amount] => 6802
[perc] => 31.789503201383372
)
)
)
PHP 非常适合对数组进行排序,但遇到此问题时我不知道该使用什么。请查看上面的数组。
我想通过perc-key 从低到高对内部subcats[] 数组进行排序。
我希望结果是:
Array opareas
(
[0] => Array
(
[name] = => array('opname1')
[subcats] => Array
(
[0] => Array
(
[amount] => 1
[perc] => 0.011394712853236098 //Lowest percentage value
)
[1] => Array
(
[amount] => 3679
[perc] => 41.921148587055605
)
[2] => Array
(
[amount] => 9883
[perc] => 112.61394712853236 //Highest percentage value
)
)
)
[1] => Array
(
[name] = => array('opname2');
[subcats] => Array
(
[0] => Array
(
[amount] => 955
[perc] => 4.463242510632331 //Lowest percentage value
)
[1] => Array
(
[amount] => 1473
[perc] => 6.884142636818245
)
[2] => Array
(
[amount] => 12166
[perc] => 56.8584380987989
)
[3] => Array
(
[amount] => 6802
[perc] => 31.789503201383372 //Highest percentage value
)
)
)
我试过了:
class whateverArray {
private function sort_subcats_perc($a, $b) {
if ($a['subcats']['perc'] == $b['subcats']['perc'] ) {return 0;}
return ( $a['subcats']['perc'] < $b['subcats']['perc'] ) ? -1 : 1;
}
public function showStuff() {
$opareas = array(); //Given above
//Sort subcat array from low to high based on perc-key
uasort( $opareas, array( $this, 'sort_subcats_perc') );
}
);
}
我不希望实际的 opareas[0] 和 operas[1] 在数组中切换位置(使用我尝试过的函数时会发生什么),我只想要内部数组subcats[] 根据 perc-field/key 更改它的顺序。 uasort 可以做到这一点吗?还是其他PHP内置的优秀排序功能?
【问题讨论】: