我有一个如下所示的数组:
PHP Syntax (Toggle Plain Text)
array
0 =>
array
0 => string '12/08/2011' (length=10)
1 => string '00:00' (length=5)
2 => string '34.83' (length=5)
3 => string '12/08/2011' (length=10)
4 => string '00:00' (length=5)
5 => string '34.83' (length=5)
1 =>
array
0 => string '12/08/2011' (length=10)
1 => string '01:00' (length=5)
2 => string '32.07' (length=5)
3 => string '12/08/2011' (length=10)
4 => string '01:00' (length=5)
5 => string '32.07' (length=5)
2 =>
array
0 => string '12/08/2011' (length=10)
1 => string '02:00' (length=5)
2 => string '28.69' (length=5)
3 => string '12/08/2011' (length=10)
4 => string '02:00' (length=5)
5 => string '28.69' (length=5)
3 =>
array
0 => string '12/08/2011' (length=10)
1 => string '03:00' (length=5)
2 => string '28.17' (length=5)
3 => string '12/08/2011' (length=10)
4 => string '03:00' (length=5)
5 => string '28.17' (length=5)
array
0 =>
array
0 => string '12/08/2011' (length=10)
1 => string '00:00' (length=5)
2 => string 'AVERAGE OF 2&5' (length=5)
PHP Syntax (Toggle Plain Text)
1 =>
array
0 => string '12/08/2011' (length=10)
1 => string '01:00' (length=5)
2 => string 'AVERAGE OF 2&5' (length=5)
2 =>
array
0 => string '12/08/2011' (length=10)
1 => string '02:00' (length=5)
2 => string 'AVERAGE OF 2&5' (length=5)
3 =>
array
0 => string '12/08/2011' (length=10)
1 => string '03:00' (length=5)
2 => string 'AVERAGE OF 2&5' (length=5)
任何帮助都会受到赞赏,我一直在努力解决这个问题几个小时现在无法实现这个目标吗? ...我是否需要将元素分解为自己的数组,然后重新插入?
谢谢。答案 0 :(得分:2)
如果你有php5.3 +你可以使用带有array_map的闭包在两行中(如果你喜欢难以读取函数调用那么一行):
$f = function($x) { return array($x[0], $x[1], ($x[2]+$x[5])/2); };
$new = array_map($f, $arr);
print_r($new);
闭包返回一个新数组,其中包含您请求的两个值,并平均键2和5的值。
如果您没有PHP5.3,请使用常规功能:
function dan_is_awesome($x) { return array($x[0], $x[1], ($x[2]+$x[5])/2); };
$new = array_map('dan_is_awesome', $arr);
print_r($new);
array_map()
将第一个参数作为回调函数,然后它对输入数组的每个元素执行。
<强>更新强>
Stack Overflow 不是可以替代逻辑思维。 “你能为我做这件事吗”不是一个合理的问题。但是......
如果您需要满足以下评论中列出的要求(平均键2/5/7/10/12/15 ......等等到阵列末尾),您可以这样做:
function dan_is_awesome($x)
{
$avg_vals = array($x[2], $x[5]);
$i = 10;
while ($i < count($x)) {
if ($i % 10 == 0 // divisible by 10
|| $i-5 % 10 == 0 // divisible by 5
|| $i % 2 == 0 // divisible by 2
) {
$avg_vals[] = $x[$i];
}
++$i;
}
$avg = array_sum($avg_vals) / count($avg_vals);
return array($x[0], $x[1], $avg);
};
$new = array_map('dan_is_awesome', $arr);
print_r($new);
答案 1 :(得分:0)
我更喜欢rdlowrey的方法,但对大多数人来说这可能更容易理解。
foreach ($arr as $key => $subArray) {
$ave = ($subArray[2] + $subArray[5]) / 2;
$arr[$key] = array($subArray[0], $subArray[1], $ave);
}