1

さて、私はこのような配列を持っています:

array {
    [0] => array {
               [0] => array {
                         ["Time"] => "01:00:00"
                      }
               [1] => array {
                         ["Time"] => "00:00:00"
                      }
    }
    [1] => array {
               [0] => array {
                         ["Time"] => "01:00:00"
                      }
               [1] => array {
                         ["Time"] => "00:00:00"
                      }
    }
}

ここでやりたいことは、内側の内部配列 (時間値を持つもの) を時間値でソートすることです。内部配列が時間値でソートされるように。どうすればいいですか?

役立つ場合は、PHP 5.3 がインストールされています。

4

4 に答える 4

2
foreach ( $array as $key => &$part )
{
    usort( &$part, function( $a, $b ) {
        return strtotime($a['Time'])-strtotime($b['Time']) > 0;
    });
}
于 2012-11-20T22:06:06.577 に答える
1

これを試して:

$arr = array(array(array("Time" => "01:00:00"), array("Time" => "02:00:00"), array("Time" => "00:00:00")),
             array(array("Time" => "02:00:00"), array("Time" => "01:00:00"), array("Time" => "00:00:00")));

$c = count($arr);
for ($i = 0; $i < $c; $i++) {
    sort($arr[$i]);
}

var_dump($arr); // outputs desired array
于 2012-11-20T22:03:50.310 に答える
0
function custom_map( $array ) {
    usort( $array, function( $a, $b ) {
        return strtotime($a['Time'])-strtotime($b['Time']) > 0;
    });
    return $array;
}

$new_array = array_map( "custom_map", $array );

http://se1.php.net/manual/en/function.usort.php

http://se1.php.net/manual/en/function.array-map.php

于 2012-11-20T21:53:12.703 に答える
0

2番目のレベルをソートするのは簡単ではないと思います.1番目のレベルを繰り返し、sort()発生するたびに呼び出します。あなたの文字列はおそらくhh:ii:ssであるため、それらを単純な文字列として比較することは完全に安全です (する必要はありませんstrtotime())。

コード: (デモ)

$array = [
    [
        ['Time' => "01:00:00"],
        ['Time' => "00:00:00"]
    ],
    [
        ['Time' => "01:00:00"],
        ['Time' => "00:00:00"]
    ]
];

array_walk($array, 'sort');
var_export($array);

出力:

array (
  0 => 
  array (
    0 => 
    array (
      'Time' => '00:00:00',
    ),
    1 => 
    array (
      'Time' => '01:00:00',
    ),
  ),
  1 => 
  array (
    0 => 
    array (
      'Time' => '01:00:00',
    ),
    1 => 
    array (
      'Time' => '00:00:00',
    ),
  ),
)
于 2020-02-10T19:56:41.493 に答える