PHP按价格值排序多维数组

时间:2013-02-03 14:37:55

标签: php arrays sorting

假设我有一个多维数组设置如下:

$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 - 对你的第一个问题 - 是的,第二个帖子 - 好点,我会实现这个。再次感谢大家!

3 个答案:

答案 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)也被分类。

来自:http://php.net/manual/en/function.array-multisort.php

答案 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);
?>

DEMO