0

次の方法で配列を保存しています

$pos[$k] = $total[$k]." / ".$posts_ids[$k]." / ".$time[$k];

次の方法を使用して、pos 配列から値を抽出しています。

$a = $b = array();
foreach ($pos as $key => $value){
  list($a[$key], $b[$key], $t[$key]) = explode('/', $value);
  array_multisort($a, SORT_DESC, SORT_NUMERIC, $b ,$t);
}

しかし、変数 $t の値を抽出することはできず、配列の位置を変更せずにソートすることもできません。

4

1 に答える 1

1

コードで配列として定義tしていませんが、値がない場合を除いて問題にはなりません (ただし、その場合は警告が表示されます)。

multisort に関しては、正しい構文は次のようになります

array_multisort($a, $b, $t, SORT_NUMERIC, SORT_DESC);

しかし、何をしたいのかはあまり明確ではなく、値の解析を別の方法で整理する方が便利な場合があります (たとえば、複数の配列ではなく多次元配列で、またはカスタムの並べ替え関数を使用します)。

<?php

        $a = array();
        $b = array();
        $t = array();

        $values = array("5/7/12","1/9/3");

        foreach($values as $key => $value)
        {
                list($a[$key], $b[$key], $t[$key]) = explode('/', $value);
        }
        array_multisort($a, $b, $t, SORT_NUMERIC, SORT_DESC);

        print_r($a);
        print_r($b);
        print_r($t);
?>

配列の位置を変更せずにソートすることもできません。

それは設計によるものです。渡した最初の配列array_multisortでソートします。これはです。他の配列内の対応する要素は、 内の項目の位置に従って並べ替えられます。$a$a

たとえば、 の最初の要素が$a最小の場合、 の最後に配置されSORT_DESCます。しかし、 の最初の要素$aが最後であるため、 の最後の要素も、その値$tに関係なく、内$tで最後に配置されます。

$tソートを「ルール化」したい場合は、それを最初に配置する必要があります。

3 つの配列すべてを個別に並べ替えたい場合は、 を使用しないでくださいarray_multisort

于 2012-11-05T06:39:35.693 に答える