2013-04-08 49 views
1

我有一个数组可以生成最近7天的时间戳,并且我有一个2天数组,可以在过去7天内给出特定日期的值。我想使用第一个数组填写每个键下不存在值的日子。将1d数组合并到2d数组,其中有一个匹配

$ 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。

+0

如果它是您正在使用的语言,请将其标记为“php”。 – shinkou 2013-04-08 16:44:19

+0

我认为这个问题是因为相同的日期出现在所有数组中? – juselliott 2013-04-08 18:02:29

回答

1

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

我想,如果你设置之前,检查$ hotel_data [$键1] [$键2]它应该工作:

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

使用,你实际上可以你如果删除。

+0

奇妙的是,它的工作!我没有检查是否空。谢谢。 – juselliott 2013-04-09 07:45:33

相关问题