-1

多次元配列を値の位置 (1 または 0 のみ)、日付、時刻で並べ替えたいと考えています。位置 = 1 の配列が最初になり、日付と時刻で並べ替える必要があります。位置 = 0 の配列は、位置 = 1 の配列の後に配置し、日付と時刻で並べ替える必要があります。

Array
(
[001] => Array
    (
        [position] => 1
        [Date] => 28.04.2013
        [Time] => 00:21:38
    )

[002] => Array
    (
        [position] => 1
        [Date] => 28.04.2013
        [Time] => 00:27:07
    )

[003] => Array
    (
        [position] => 0
        [Date] => 28.04.2013
        [Time] => 00:15:06
    )

[004] => Array
    (
        [position] => 0
        [Date] => 28.04.2013
        [Time] => 00:26:09
    )

)

それが、並べ替え後の配列のあり方です。

Array
(
[002] => Array
    (
        [position] => 1
        [Date] => 28.04.2013
        [Time] => 00:27:07
    )

[001] => Array
    (
        [position] => 1
        [Date] => 28.04.2013
        [Time] => 00:21:38
    )

[004] => Array
    (
        [position] => 0
        [Date] => 28.04.2013
        [Time] => 00:26:09
    )

[003] => Array
    (
        [position] => 0
        [Date] => 28.04.2013
        [Time] => 00:15:06
    )

)

いくつかの機能を試しましたが、どれも正しく機能しませんでした。位置 = 1 の配列が最後の配列であるか、すべての配列が日付と時刻でソートされています。私は自分でそれを理解することはできません。事前に感謝し、私の英語が下手である場合は申し訳ありません.

4

3 に答える 3

1

use usort() - 「ユーザー定義の比較関数を使用して値で配列をソートする」

function your_func($a, $b) {
    $pos = $b["position"] - $a["position"];
    if($pos) return $pos;

    $date = strtotime($b["Date"]) - strtotime($a["Date"]);
    if($date) return $date;

    $time = strtotime($b["Time"]) - strtotime($a["Time"]);
    return $time;
}
usort($arr, "your_func");
于 2013-04-27T22:09:15.713 に答える
1

function を見てusort()ください。これは、配列と比較関数をパラメーターとして受け取ります。

2 つの配列要素を比較できる比較関数を作成します。

  • 位置を比較

  • 位置が等しい場合は、日付を比較します

  • 日付が等しい場合は、時間を比較します

于 2013-04-27T22:04:38.557 に答える
1

元のデータセットは$array...という名前の配列内にあります

$positions = $datetimes = array();

foreach($array as $k => $v) {

   $positions[$k] = $v['position'];
   $datetimes[$k] = strtotime($v['Date']. ' ' .$v['Time']);

}

array_multisort($positions, SORT_DESC, $datetimes, SORT_DESC, $array);

データの比較に基づいて、最初に位置 DESC で並べ替え、次に時間 (および日付も想定) DESC で並べ替えたいようです。

作業例: http://codepad.org/exc5Dhq8

于 2013-04-27T22:15:26.917 に答える