1

私は SO と Google を検索し、同様の質問をたくさん見つけましたが、私の正確なユースケースに合うものはありません。

次のような配列の配列があります。

Array
(
    [0] => Array
        (
            [id] => c80c5133-1140-8187-ad3b-524b4ed0f1a8
            [date_entered] => 10/01/2013 03:38pm
        )

    [1] => Array
        (
            [id] => 176815c6-b57f-7643-0f08-524b4f22b51c
            [date_entered] => 10/01/2013 03:42pm
        )

    [2] => Array
        (
            [id] => df0f8824-0b12-b92e-1d2e-524c6cb19c41
            [date_entered] => 10/02/2013 11:56am
        )

)

このように、最初の次元のキーの名前を 2 番目の次元配列の date_entered キーの値に変更して、配列を最新の日付で並べ替えることができるようにする必要があります。正しい日付に対応する ID を取得する必要があるため、各配列の内容を保持する必要があります。

Array
(
    [10/01/2013 03:38pm] => Array
        (
            [id] => c80c5133-1140-8187-ad3b-524b4ed0f1a8
            [date_entered] => 10/01/2013 03:38pm
        )

    [10/01/2013 03:42pm] => Array
        (
            [id] => 176815c6-b57f-7643-0f08-524b4f22b51c
            [date_entered] => 10/01/2013 03:42pm
        )

    [10/02/2013 11:56am] => Array
        (
            [id] => df0f8824-0b12-b92e-1d2e-524c6cb19c41
            [date_entered] => 10/02/2013 11:56am
        )

)

私はこのようにしようとしていますが(明らかに正しくありません)、私の人生ではまだ手に入れることができません。

foreach ($array as $key) {
    foreach ($key as $subkey => $subvalue) {
        if ($subkey == 'date_entered') {
            // change the name of the key?
        }
    }
}

どれだけ読んで練習しても、多次元配列とそれらを操作するのに本当に苦労しています! 誰でも助けることができますか?

4

1 に答える 1

4

このコードはそれを行う必要があります:

$newArray = array();

foreach ($array as $id => $dataset) {
  $newArray[ $dataset['date_entered'] ] = $dataset;
}

「foreach ループ内で配列を変更すると、予期しない動作が発生する可能性がある」ため、ここで新しい配列を作成しました( source )。

元の配列を保持する必要がある場合は、数値インデックスを使用して要素にアクセスできます。

$arrCount = count($array);
for ($i=0; $i<$arrCount; $i++) {
  $array[ $dataset['date_entered'] ] = $array[$i];
  unset($array[$i]);
}

すべての要素は、前のキーで設定解除/削除される前にコピーされます。

于 2013-10-03T19:47:34.857 に答える