2013-02-03 80 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