2013-12-14 61 views
0

我想从以下阵列值提取到一个新的数组:组合数组忽略空值?

我收到与foreach命令的帮助,但我现在不得不合并两个数组,其中之一有null值的麻烦。

原始数组:http://pastebin.com/jeKVxpka

使用下列内容:

foreach ($arr['products']['product'] as $num) { 

    $pid = $num['pid']; 

    foreach($num['configoptions']['configoption']['0']['options']['option'] as $option) 
     { 
      $name = $option['name']; 
      $yearlycosts = $option['pricing']['GBP']['monthly']; 

      $namearr[] = $name; 
      $yearlyarr[] = $yearlycosts; 

      $peryear = array_combine($namearr, $yearlyarr); 

     } 

    $pricing[$pid] = array('cost' => $peryear); 

} 

print_r($pricing); 

我已经能够产生以下数组:

Array 
(
    [2] => Array 
     (
      [cost] => Array 
       (
        [1 Year] => 4.17 
        [2 Years] => 8.33 
        [3 Years] => 12.50 
        [4 Years] => 16.67 
        [5 Years] => 20.83 
       ) 

     ) 

    [3] => Array 
     (
      [cost] => Array 
       (
        [1 Year] => 40.83 
        [2 Years] => 8.33 <--- 
        [3 Years] => 12.50  |--- These values shouldn't be here! 
        [4 Years] => 16.67  | 
        [5 Years] => 20.83 <--- 
       ) 

     ) 

    [4] => Array 
     (
      [cost] => Array 
       (
        [1 Year] => 49.17 
        [2 Years] => 79.17 
        [3 Years] => 115.83 
        [4 Years] => 149.17 
        [5 Years] => 190.83 
       ) 

     ) 

) 

的问题是,如果你看看在原始阵列中,没有产品ID [3]的价格信息。对于产品ID [2],2至5年的数据已填充2至5年的值。

我已使用array_filterunset进行了实验,但我无法弄清楚如何防止这种情况发生(或为什么会发生)。

+0

为什么每次通过循环执行'array_combine',而不是循环完成时? – Barmar

+0

现在看来这显然是错误的。谢谢。 –

回答

2

您需要在内部循环之前清空数组,因此您不必保留上一次主循环迭代的值。你应该在内循环之外做array_combine

foreach ($arr['products']['product'] as $num) { 

    $pid = $num['pid']; 

    $namearr = array(); 
    $yearlyarr = array(); 

    foreach($num['configoptions']['configoption']['0']['options']['option'] as $option) 
     { 
      $name = $option['name']; 
      $yearlycosts = $option['pricing']['GBP']['monthly']; 

      $namearr[] = $name; 
      $yearlyarr[] = $yearlycosts; 

     } 

    $peryear = array_combine($namearr, $yearlyarr); 
    $pricing[$pid] = array('cost' => $peryear); 

} 

print_r($pricing); 
+0

这很好。谢谢。由于我不熟悉数组,因此我认为它们是空的,因为它们还没有被定义。 –

+0

它们在被定义之前是空的。但是在第一次通过循环之后,它们就被定义了,所以它们不再是空的。 PHP中的变量并不局限于特定的循环; PHP中的变量范围是通过函数或类,而不是更细粒度的块。 – Barmar

+0

我明白了。这有助于我更好地理解为什么我的代码无法按预期工作。再次感谢,感谢帮助(和解释)。 –