将1d数组合并为2d数组,其中有'


Merge 1d array into 2d array where there's a match

我有一个数组,它生成过去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。

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

我认为它应该工作,如果你检查$hotel_data[$key1][$key2]设置之前:

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

使用它你可以删除if