0

3 つの情報を含む 3 つの配列があります。おそらく、ここで示す方が簡単です:

    $dataPoints = array(
    array('1' => '33','2' => 'dave','3' => '367'),
    array('1' => '168','2' => 'susan','3' => '56788'),
    array('1' => '99','2' => 'tim','3' => '6')

foreach ($dataPoints as $key => $row) {
    $x[$key]  = $row['1'];
    $y[$key] = $row['2'];
    $z[$key] = $row['3'];   
}

$aaa = array_multisort($x, SORT_DESC, $y, SORT_ASC, $z, $dataPoints);


print_r($aaa);

最小の '3' (3 列目) の値を並べ替えて、その配列の 3 つの回答すべてを出力しようとしています。

したがって、「6」は 3 列目の最低値です。次に、「99」、「tim」、および「6」を出力します。

私は何を間違っていますか?

4

3 に答える 3

0

The docsによると、array_multisort は TRUE または FALSE を返します。したがって、配列は直接変更されます。

正しいコードは次のとおりです。

$dataPoints = array(
array('1' => '33','2' => 'dave','3' => '367'),
array('1' => '168','2' => 'susan','3' => '56788'),
array('1' => '99','2' => 'tim','3' => '6')
);

foreach ($dataPoints as $key => $row) {
    $x[$key]  = $row['1'];
    $y[$key] = $row['2'];
    $z[$key] = $row['3'];   
}

$aaa = array_multisort($x, SORT_DESC, $y, SORT_ASC, $z, SORT_ASC, $dataPoints);

print_r($aaa); //TRUE or FALSE
print_r($dataPoints); //The data sorted

また、最初の列、次に 2 番目、3 番目の列でソートしていることにも注意してください (同数の場合)。最初に 3 番目の列で並べ替えたい場合は、これを使用する必要があります。

$aaa = array_multisort($z, SORT_ASC, $x, SORT_DESC, $y, SORT_ASC, $dataPoints);
于 2013-09-19T13:29:43.377 に答える
0

私はこれがあなたが望むものだと信じていますusort. の最初のエントリは$datapointsあなたが探しているレコードを保持します. もちろん、関数を変更しusortてソートすることもできます。

<?php
$dataPoints = array(
array('1' => '33','2' => 'dave','3' => '367'),
array('1' => '168','2' => 'susan','3' => '56788'),
array('1' => '99','2' => 'tim','3' => '6')
);

usort($dataPoints, function($a, $b){
    if ($a[3] == $b[3]) {
        return 0;
    }
    return ($a[3] < $b[3]) ? -1 : 1;
});

print_r($dataPoints[0]);

これは、実際の例へのリンクですhttp://3v4l.org/XJU9t

于 2013-09-19T13:39:54.400 に答える
0

個々の配列 ($x、$y、$z) に対してソート操作が実行されています。これらの配列を見ると、ソートされていることがわかります。

$aaa = trueこれは、array_multisort成功したことを意味します。

于 2013-09-19T13:28:55.440 に答える