感谢我提出的最后两个问题的所有输入。慢慢地,但肯定地,在学习更多方面。现在,下一个问题与数组映射/行走有关。我不知道如何让这个工作,但这是正在发生的事情:
我有三个数组,每个数组都由带有自己数组的键组成。每个数组看起来像:
$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
。只是不确定如何继续,因为数组的长度可能不同,甚至没有相同的服务密钥。
答案 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);