2

私は今このコードを持っています。それは日付と時刻を取得します。その 1 つの foreach ループで約 10 の日付と時刻が返されるため、番号付きインデックスのようなものを作成したかったのです。これは関数内にあり、この配列を返して別の場所で何かを行う必要があります。

$i = 0;
    foreach ($data as $key =>$value) {
        $new_data = array (
            $i => array (
                "date"=> $value->DATE,
                "time"=> $value->TIME,
            )
        );
        $i++;
    }

もっとこんな感じにして欲しかった

Array (
    [0] => Array (
        [date] => whatever date
        [time] => whatever time
    )
    [1] => Array (
        [date] => whatever date
        [time] => whatever time
    )
    [2] .. etc
)

それは私が得ているものではないことがわかりました。私はこれを取得します。

Array (
        [10] => Array (
            [date] => whatever date
            [time] => whatever time
        )

1つだけ印刷されます/10分の1しか表示されません。$i 変数を ++ing し続けて、番号付きインデックスで取得できるようにするにはどうすればよいですか? なぜ10番目しか表示されないのですか?

4

2 に答える 2

6

あなたはおそらくこれだけを望んでいました:

$new_data = array();
foreach ($data as $value) {
    $new_data[] = array (
        "date"=> $value->DATE;
        "time" => $value->TIME;
    );
}

まず、 を使用しない場合、反復ごとに変数に[]新しい値を代入するだけです。$new_dataこれにより、各ステップで新しい要素を配列に追加します。それは明らかに、この場合にすべきことです。

第 2 に、この場合、別の変数を使用する必要はありません。インデックスは 0 から始まり、新しい値が増えるたびに[]増加します。

最後に (コメントで言及してくれた @reformed に敬意を表します)、foreach配列のキーを実際に使用しない場合は、長い形式で記述する必要はありません。foreach $arr as $val十分なものです。


私の意見では、これはarray_mapでより簡潔に書き直すことができます:

$new_data = array_map(function($val) { return array(
  'date' => $val->DATE,
  'time' => $val->TIME
); }, $data);

この関数は通常、別の配列に基づいて通常の配列を作成したい場合に非常に適しています。この新しい配列の各要素は、元のコレクションの対応する要素に何らかの形で基づいています。

array_mapここでは、PHP 5.3 以降で使用できる無名関数を の引数として使用しました。

于 2013-06-06T17:05:22.657 に答える
1
$i = 0;
foreach ($data as $key =>$value) {
    $new_data[$i++] = array (
            "date"=> $value->DATE;
            "time" => $value->TIME;
        )
    );
}
于 2013-06-06T17:05:09.713 に答える