【发布时间】:2015-05-26 00:04:27
【问题描述】:
我试图弄清楚如何对一个数组进行排序,该数组具有子数组,每个子数组都有一个 X 和 Y 坐标。我需要先将最大尺寸排序到最小尺寸,例如:
$sizes = array(
'a' => array(
'x' => 10,
'y' => 140,
),
'b' => array(
'x' => 20,
'y' => 24,
),
'c' => array(
'x' => 20,
'y' => 40,
),
'd' => array(
'x' => 50,
'y' => 50,
),
'e' => array(
'x' => 10,
'y' => 9,
),
);
应该自然地这样诉诸:
$sizes = array(
'e' => array(
'x' => 10,
'y' => 9,
),
'b' => array(
'x' => 20,
'y' => 24,
),
'c' => array(
'x' => 20,
'y' => 40,
),
'd' => array(
'x' => 50,
'y' => 50,
),
'a' => array(
'x' => 10,
'y' => 140,
),
);
在使用 asort 之前我已经按值排序,但是我不确定如何在这样的多维数组上排序和维护索引关联。任何帮助都会很棒!
【问题讨论】:
-
你试过
uasort()吗?还有,[10, 140]不应该是第二项吗? -
嗨,Jack,不,我没有,但是 10 x 140 实际上是最大的,因为它的宽度更小,它仍然会占用最多的区域。
-
那么,
uasort($sizes, function($a, $b) { return ($a['x'] * $a['y']) - ($b['x'] * $b['y']); });呢? -
非常感谢这个千斤顶,但为什么 10 x 140 最终排在倒数第二位?
-
因为 2500 > 1400。
标签: php sorting multidimensional-array asort