假设我有一个多维数组设置如下:
$matrix[1][1]=4.54; $matrix[2][1]="apples"; $matrix[3][1]="coles";
$matrix[1][2]=7.2140230; $matrix[2][2]="apples"; $matrix[3][2]="safeway";
$matrix[1][3]=15.56; $matrix[2][3]="oranges"; $matrix[3][3]="coles";
$matrix[1][4]=2.34; $matrix[2][4]="bananas"; $matrix[3][4]="safeway";
$matrix[1][5]=27.98; $matrix[2][5]="grapes"; $matrix[3][5]="coles";
$matrix[1][6]=17.68493403; $matrix[2][6]="oranges"; $matrix[3][6]="safeway";
我希望通过我在第一列中存储的定价信息重新安排,以便$matrix
的新订单为:
$matrix[1][1]=2.34; $matrix[2][1]="bananas"; $matrix[3][1]="safeway";
$matrix[1][2]=4.54; $matrix[2][2]="apples"; $matrix[3][2]="coles";
$matrix[1][3]=7.2140230; $matrix[2][3]="apples"; $matrix[3][3]="safeway";
$matrix[1][4]=15.56; $matrix[2][4]="oranges"; $matrix[3][4]="coles";
$matrix[1][5]=17.68493403; $matrix[2][5]="oranges"; $matrix[3][5]="safeway";
$matrix[1][6]=27.98; $matrix[2][6]="grapes"; $matrix[3][6]="coles";
实现这一目标的最佳方法是什么?我已经阅读了有关排序多维数组的其他问题,但实际上遇到了麻烦,因为这些示例似乎具有关键字和元素的关联数组,而我只是使用不同的数字来存储每个数据。我宁愿不改变我在数组中存储数据的方式,因为实际的脚本很长很复杂,所以这将涉及大量的重新工作。
我是PHP新手,所以如果我遗漏了明显的东西,我很抱歉。谢谢你的帮助。
编辑:感谢大家的建议,scessors代码正是我所需要的。 Halfer - 对你的第一个问题 - 是的,第二个帖子 - 好点,我会实现这个。再次感谢大家!答案 0 :(得分:2)
如果排序的数组以零开头没问题,可以使用array_multisort:
array_multisort(
$matrix[1], SORT_ASC, SORT_NUMERIC,
$matrix[2], SORT_ASC, SORT_STRING,
$matrix[3], SORT_ASC, SORT_STRING
);
另见my example。
答案 1 :(得分:1)
我相信phps array_multisort会为你做这件事:
以下是docs的一个例子:
<?php
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);
var_dump($ar1);
var_dump($ar2);
?>
在此示例中,排序后,第一个数组将包含0,10,100,100。第二个数组将包含4,1,2,3。第二个数组中的条目对应于第一个中的相同条目阵列(100和100)也被分类。
答案 2 :(得分:0)
使用Adam Backstrom提供的my_uksort
<?php
function my_uksort($a, $b) {
global $matrix;
asort($matrix[1]);
return $matrix[1][$a] < $matrix[1][$b] ? -1 : 1;
}
uksort($matrix[2], 'my_uksort');
uksort($matrix[3], 'my_uksort');
print_r($matrix);
?>