将1d数组合并到2d数组中,其中存在匹配

时间:2013-04-08 16:40:54

标签: php arrays multidimensional-array

我有一个数组生成过去7天的时间戳,我有一个2d数组,它给出了过去7天内某些天的值。我想使用第一个数组填写每个键下没有值的日子。

$ hotel_data:

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

    [48] => Array
        (
        )

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

$ d:

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

这是我试图用来合并两个数组的代码:

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]中的两个值已被0替换。

1 个答案:

答案 0 :(得分:1)

原因是您有2个值设置为50。 当$ datekey是第一个值的键时,将所有其他值设置为0,包括第二个值。 当$ datekey是第二个值的键时,将所有其他值设置为0,包括第一个值。

我认为如果你在设置它之前检查$ hotel_data [$ key1] [$ key2]应该会有效:

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

使用它你实际上可以删除你的。