1

過去 7 日間のタイムスタンプを生成する配列があり、過去 7 日間の特定の日に値を与える 2 次元配列があります。最初の配列を使用して、各キーの下に値が存在しない日を埋めたいと考えています。

$hotel_data:

Array
(
    [49] => Array
        (
            [1365202800] => 2
        )

    [48] => Array
        (
        )

    [50] => Array
        (
            [1364943600] => 4
            [1365375600] => 5
        )
    )

$日:

Array
(
    [1365375600] => 0
    [1365289200] => 0
    [1365202800] => 0
    [1365116400] => 0
    [1365030000] => 0
    [1364943600] => 0
    [1364857200] => 0
    [1364770800] => 0
    [1364688000] => 0
    [1364601600] => 0
)

2つの配列をマージするために使用しようとしているコードは次のとおりです。

foreach($hotel_data as $key1=>$value1) {
    foreach($hotel_data[$key1] as $datekey=>$ratingval) {
        foreach($d as $key2=>$value2)
        {
            if($datekey !== $key2) {
                $hotel_data[$key1][$key2] = 0;
            }
        }   
            //echo $datekey.'<br/>';
    }
}   

そして、これは結果です:

Array
(
    [49] => Array
        (
            [1365202800] => 2
            [1365375600] => 0
            [1365289200] => 0
            [1365116400] => 0
            [1365030000] => 0
            [1364943600] => 0
            [1364857200] => 0
            [1364770800] => 0
            [1364688000] => 0
            [1364601600] => 0
        )

    [48] => Array
        (
        )

    [50] => Array
        (
            [1364943600] => 0
            [1365375600] => 0
            [1365289200] => 0
            [1365202800] => 0
            [1365116400] => 0
            [1365030000] => 0
            [1364857200] => 0
            [1364770800] => 0
            [1364688000] => 0
            [1364601600] => 0
        )

)

しかし、ご覧のとおり、何らかの理由で [49] の値は残っていますが、[50] にあった 2 つの値は 0 に置き換えられています。

4

1 に答える 1

1

その理由は、50 に設定された 2 つの値があるためです。$datekey が最初の値のキーである場合、2 番目の値を含め、他のすべての値を 0 に設定します。$datekey が 2 番目の値のキーである場合、最初の値を含め、他のすべての値を 0 に設定します。

設定する前に $hotel_data[$key1][$key2] をチェックするとうまくいくと思います:

if (!isset($hotel_data[$key1][$key2]) { $hotel_data[$key1][$key2]=0;}

それを使用して、実際にifを削除できます。

于 2013-04-08T18:47:37.917 に答える