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

そして、最初の 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 にまったく慣れていないので、ここで明らかな何かが欠けている場合は申し訳ありません。ご協力いただきありがとうございます。

編集:皆さんのアドバイスに感謝します.scessorsコードはまさに私が必要としていたものです. Halfer - あなたの最初の質問に - はい、2 番目の投稿 - 良い点、これを実装します。みんなありがとう!

4

3 に答える 3

2

ソートされた配列が zero で始まっても問題ない場合は、 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 が含まれます。2 番目の配列には 4、1、2、3 が含まれます。2 番目の配列のエントリは、最初の配列 (100および 100) もソートされました。

から: http://php.net/manual/en/function.array-multisort.php

于 2013-02-03T14:42:18.203 に答える
0

AdamBackstromが提供する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 に答える