2013-02-03 83 views
2

说我有一个多维数组设置如下:多维数组的价格价值的PHP排序

$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"; 

,我希望通过我已经保存下的定价信息来重新安排第1列,使$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的新手,所以我很抱歉如果我在这里丢失了一些明显的东西。谢谢你的帮助。

编辑:谢谢大家的建议,sors的代码正是我所需要的。 Halfer - 给你的第一个问题 - 是的,第二篇 - 好点,我会执行这个。再次感谢大家!

+0

设置是对第一索引1 =价格,2 =产品,3 =商店,用于输入和输出数组?感谢@kapep提供了更好的格式,这使得它更清晰! – halfer

+0

你能改变数据格式吗?如果第一个数字是“产品ID”,最后一个数字是价格/名称/供应商索引,这将更容易。 – slugonamission

+0

我感谢你不想改变你的方法,但只是为了记录它可能会更好,如果你要[X] [Y]顺序交换[Y] [X]。这样'$ matrix [1]'中的数组将包含价格,产品和商店,因此是一个可以更容易排序的“对象”。 – halfer

回答

2

如果它是没有问题的数组排序从0开始,您可以使用array_multisort

array_multisort(
    $matrix[1], SORT_ASC, SORT_NUMERIC, 
    $matrix[2], SORT_ASC, SORT_STRING, 
    $matrix[3], SORT_ASC, SORT_STRING 
); 

另见my example

+0

如果你想离开原始阵列完好呢?只需复制? – Strawberry

+0

是的,也看[这个例子](http://ideone.com/GXLeIt)。 – scessor

1

相信PHPS在array_multisort将替你:

这里有一个例如由文档:

<?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

+0

对不起,我的答案将意味着分裂您的阵列:-( – DEzra

+0

感谢您的帮助DEzra – user2037290

+0

没问题,很高兴你有一个答案 – DEzra

0

使用my_uksort通过Adam Backstrom

<?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