0

次の曜日の配列があり、各日には1日の時間があります(配列全体がパートタイム従業員のスケジュールを表します)。

Array
    (
        [7] => Array
            (
                [0] => 15
                [1] => 14
                [2] => 13
                [3] => 11
                [4] => 12
                [5] => 10
            )

        [1] => Array
            (
                [0] => 10
                [1] => 13
                [2] => 12
            )

        [6] => Array
            (
                [0] => 14
            )

        [3] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )

    )

そして私は単にする必要があります:

  1. 各サブ配列(2次元)をascでソートします-数値キーを維持する必要はありません。値は整数です
  2. ascを1次元でソートし、数値の整数キーを維持します

すなわち:

Array
    (
        [1] => Array
            (
                [0] => 10
                [1] => 12
                [2] => 13
            )

        [3] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )

        [6] => Array
            (
                [0] => 14
            )

        [7] => Array
            (
                [0] => 10
                [1] => 11
                [2] => 12
                [3] => 13
                [4] => 14
                [5] => 15
            )

    )

追加情報:

  1. 1次元のキーと2次元の値(そしてもちろんそれらの関連付け)だけが私のユースケースにとって意味があります
  2. 1番目のディメンションは、1〜7(曜日)の範囲で最大7つの値を持つことができ、少なくとも1つの値(1日)を持つことになります。
  3. 2番目のディメンションは、0〜23(1日の時間)の範囲で最大24の値を持つことができ、少なくとも1つの値(1日あたり1時間)を持つことができます。

ed配列foreach全体と各2次元配列でこれを実行できることはわかっています。ksortsort

ksort($sched);
foreach ($sched as &$array) sort($array);
unset($array);

しかし、代わりにネイティブのphp配列関数を使用してこれを実現できることを望んでいました。

私の検索は私を試みさせましたarray_multisort(array_values($array), array_keys($array), $array)、しかし私はそれをうまく動かすことができません。

4

3 に答える 3

0

1日の終わりには、実際には2つの並べ替えタスクを実行する必要があります。1つ目は、外側の配列をキーで並べ替えることです。2つ目は、内部配列を値で並べ替えることです。両方のソートは互いに独立しています。

最善の解決策は、すでに見つけたものです。array_multisort()は、「姓で並べ替える-等しい場合は名で並べ替える」のように、実際には相互に依存する並べ替えのために作成されているため、役に立ちません。usort()ただし、並べ替え関数を定義し、友人を使用すると、実際に並べ替えている内容をより適切に伝えることができるため、実際には避ける必要があります。

于 2012-10-13T09:31:36.270 に答える
-1

これが私たちにできる最善のことです。

ksort($arr);
foreach ($arr as $k => $v)
  array_multisort($arr[$k]);
于 2012-05-24T07:02:42.220 に答える
-1

次の行を試してください

array_multisort(array_values($array), array_keys($array), ksort($array))

これにより警告が発生する場合がありますが、実際に問題が解決する場合は、 error_reporting(0)を使用して警告を回避できます。

于 2012-05-24T07:25:33.893 に答える