阵列图?步行?还有什么?

时间:2014-01-01 23:20:34

标签: php arrays

感谢我提出的最后两个问题的所有输入。慢慢地,但肯定地,在学习更多方面。现在,下一个问题与数组映射/行走有关。我不知道如何让这个工作,但这是正在发生的事情:

我有三个数组,每个数组都由带有自己数组的键组成。每个数组看起来像:

$arr1 = array(
    'service3'=>array('price'=>'2.00','transit'=>'3'), 
    'service2'=>array('price'=>'4.00', 'transit'=>'1')
); 

$arr2 = array(
    'service1'=>array('price'=>'6.00','transit'=>'2'), 
    'service2'=>array('price'=>'8.00', 'transit'=>'1')
);

arr3 = array(
    'service3'=>array('price'=>'2.00','transit'=>'3'), 
    'service2'=>array('price'=>'4.00', 'transit'=>'1')
);

等等。

我想要做的是使用匹配的密钥从三个数组中的每一个添加服务。需要注意的是,每个阵列可能具有不同的长度,并且每个阵列可能没有相同的服务(参见上面的数组3,我的意思)。

我一直在寻找一种更简洁的方法来将三个数组添加到一起,而无需运行一堆foreach循环或创建临时数组。似乎带有回调函数的array_map将是一种很好的方式,甚至可能是array_walk。只是不确定如何继续,因为数组的长度可能不同,甚至没有相同的服务密钥。

1 个答案:

答案 0 :(得分:1)

这是一个快速功能,你可以使用(未​​经测试):

<?php
function group_by_service() {
  $return = array();
  $arrays = func_get_args();
  foreach($arrays as $arr) {
    foreach($arr as $service => $props) {
      if (!array_key_exists($service, $return)) {
        $return[$service] = $props;
      } else {
        $return[$service]['price'] += $props['price'];
        $return[$service]['transit'] += $props['transit'];
      }
    }
  }
  return $return;
}

然后,您可以像这样使用此功能:

<?php
$arr1 = array(
    'service3'=>array('price'=>'2.00','transit'=>'3'), 
    'service2'=>array('price'=>'4.00', 'transit'=>'1')
); 

$arr2 = array(
    'service1'=>array('price'=>'6.00','transit'=>'2'), 
    'service2'=>array('price'=>'8.00', 'transit'=>'1')
);

arr3 = array(
    'service3'=>array('price'=>'2.00','transit'=>'3'), 
    'service2'=>array('price'=>'4.00', 'transit'=>'1')
);

$grouped = group_by_service($arr1, $arr2, $arr3);
print_r($grouped);