【发布时间】:2014-06-04 08:31:22
【问题描述】:
这是this slightly simpler question 的后续行动。主要区别在于被排序的项目的复杂性增加(数组,而不是整数),需要 usort
对不起标题,开始扩展我的描述能力! 我有一个 PHP 关联数组,以字符串为键。每个值都是一个 2 元素数组的数组(它们是图表的数据点)。我想根据点中第一个元素的数值对每个点数组进行排序。我相信这应该很容易,而且我已经找到了足够多的例子,我认为我应该做正确的事情,但它并不完全有效,所以有一个错字或者我是个白痴什么的......
PHP:
//Each fruit corresponds to an array (series) of 2-element arrays (data points)
$data = [
'banana' => [
[1,1],[3,1],[2,1]
],
'orange' => [
[5,1],[1,1],[3,1]
]
];
echo "Before sort:\n";
var_dump($data);
//For each fruit, I want to order the 2-element arrays by the first element
//NB following previous Q tried & to force reference, doesn't seem to work here
foreach ($data as $key => &$series)
{
usort($series, 'sortByZeroethElement');
}
echo "\n\nAfter sort:\n";
var_dump($data);
function sortByZeroethElement($a, $b)
{
return (int) $a[0] > (int) $b[0] ? 1 : (int) $a[0] == (int) $b[0] ? 0 : -1;
}
输出:
Before sort:
array(2) {
'banana' =>
array(3) {
[0] =>
array(2) {
[0] =>
int(1)
[1] =>
int(1)
}
[1] =>
array(2) {
[0] =>
int(3)
[1] =>
int(1)
}
[2] =>
array(2) {
[0] =>
int(2)
[1] =>
int(1)
}
}
'orange' =>
array(3) {
[0] =>
array(2) {
[0] =>
int(5)
[1] =>
int(1)
}
[1] =>
array(2) {
[0] =>
int(1)
[1] =>
int(1)
}
[2] =>
array(2) {
[0] =>
int(3)
[1] =>
int(1)
}
}
}
After sort:
array(2) {
'banana' =>
array(3) {
[0] =>
array(2) {
[0] =>
int(2)
[1] =>
int(1)
}
[1] =>
array(2) {
[0] =>
int(3)
[1] =>
int(1)
}
[2] =>
array(2) {
[0] =>
int(1)
[1] =>
int(1)
}
}
'orange' =>
array(3) {
[0] =>
array(2) {
[0] =>
int(3)
[1] =>
int(1)
}
[1] =>
array(2) {
[0] =>
int(1)
[1] =>
int(1)
}
[2] =>
array(2) {
[0] =>
int(5)
[1] =>
int(1)
}
}
}
期望的结果:
'banana' => [
[1,1],[2,1],[3,1]
],
'orange' => [
[1,1],[3,1],[5,1]
]
如您所见,在输出中,点的内部数组尚未排序。我究竟做错了什么? (PHP 5.5.9,Windows 7)
【问题讨论】:
-
那么最终的输出是什么?
banana = [1,1], [2,1], [3, 1], orange = [1, 1], [3,1], [5,1]? -
是的!就是这样,我会做一个编辑