-2

私は大きな配列を持っています(これはその一部です):

[0] => stdClass Object
    (
        [products] => Array
            (
                [0] => stdClass Object
                    (
                        [body_html] => bodyhtml
                        [published_at] => 2012-12-16T23:59:18+00:00
                        [created_at] => 2012-12-16T11:30:24+00:00
                        [updated_at] => 2012-12-18T10:52:14+00:00
                        [vendor] => Name
                        [product_type] => type
                    )
                [1] => stdClass Object
                    (
                        [body_html] => bodyhtml
                        [published_at] => 2012-12-16T23:59:18+00:00
                        [created_at] => 2012-12-16T10:30:24+00:00
                        [updated_at] => 2012-12-18T10:52:14+00:00
                        [vendor] => Name
                        [product_type] => type
                    )
              )
      )

そして、各製品を作成した日付で並べる必要があります...特定の順序(時系列)になるように、あらゆる種類のusort、ksort、uksortテクニックを試して失敗しましたが、失敗しました!

どんなガイダンスでも大歓迎です

4

2 に答える 2

1

uasort 関数を使用する必要があります。これにより、記述した単純な比較関数を指定できます。詳細については、 uasortを参照してください。uasort 呼び出しの一部として無名関数を定義することもできます。配列を持つオブジェクトがあるため、オブジェクトの配列を uasort 関数に渡していることを確認してください。オブジェクトの配列を並べ替えているため、比較関数は 2 つのオブジェクトで動作していることを考慮する必要があります。

応答と var_dump に基づいて構築します。

uasort($foo[0]->products, function($a, $b) {

    if ($a->created_at < $b->created_at) {
        return -1;
    }
    return 1;
});
于 2012-12-18T23:08:15.277 に答える
0

次に例を示します。

$arr_1 = array('name' => 'A', 
               'date' => '2012-12-16T11:30:24+00:00' , 
               'created_at' => '2012-12-16T11:30:24+00:00');
$arr_2 = array('name' => 'B', 
               'date' => '2012-12-16T11:30:22+00:00' , 
               'created_at' => '2012-12-16T11:30:21+00:00');


$test_array = array($arr_1, $arr_2);
var_dump($test_array);

usort($test_array, function($a, $b) {
    $a_date = new DateTime($a['date']);
    $b_date = new DateTime($b['date']);
    if ($a_date < $b_date) {
        return -1;
    }
    return 1;
});

var_dump($test_array);
于 2012-12-18T23:14:39.110 に答える