鉴于下面的数组,我如何创建一个具有匹配键的和数组?
$arr = array(
array('alpha',1,2,3,4,5),
array('beta',1,2,3,4,5),
array('gamma',1,2,3,4,5),
array('delta',1,2,3,4,5)
);
这是我最终想要的:
array('',4,8,12,16,20);
这是最有效的方式吗?
function getArrTotals($arr) {
$arrTotal = array();
foreach ($arr as $subArr) {
foreach ($subArr as $k => $v) {
if (is_numeric($v)) {
if (!array_key_exists($k,$arrTotal)) {
$arrTotal[$k] = 0;
}
$arrTotal[$k] = $arrTotal[$k] + $v;
} else {
if (!array_key_exists($k,$arrTotal)) {
$arrTotal[$k] = '';
}
}
}
}
return $arrTotal;
}
答案 0 :(得分:1)
使用PHP 5.5的新array_column()函数:
$colCount = count($arr[0]);
$result = array();
for ($i = 0; $i < $colCount; $i++) {
$result[] =
array_sum(
array_column($arr, $i)
);
}
var_dump($result);
或早期版本的PHP
$result = array();
foreach(call_user_func_array('array_map',array_merge(array(NULL),$arr)) as $column) {
$result[] = array_sum($column);
}
var_dump($result);
两种方法都假设每个子数组中的条目数相同
修改强>
过滤掉非数字值以返回第一列的空字符串:
$colCount = count($arr[0]);
$result = array();
for ($i = 0; $i < $colCount; $i++) {
$values = array_filter(
array_column($arr, $i),
'is_numeric'
);
$result[] = count($values) > 0 ? array_sum($values) : '';
}
var_dump($result);
和
$result = array();
foreach(call_user_func_array('array_map',array_merge(array(NULL),$arr)) as $column) {
$values = array_filter($column,
'is_numeric'
);
$result[] = count($values) > 0 ? array_sum($values) : '';
}
var_dump($result);
如果你想要一个null,那么只需用'null
替换''