2

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

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

4

3 回答 3

2

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

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

另请参阅我的示例

于 2013-02-03T14:53:20.537 回答
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

于 2013-02-03T14:42:18.203 回答
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);
?>

演示

于 2013-02-03T15:56:02.687 回答