我习惯于用R分析数据,很难用PHP计算数组。
给定以下数组($dat
),获取所有雌性总数的最简单方法是什么?
print("<pre>".print_r($dat,true)."</pre>");
Array
(
[0] => Array
(
[0] => female
[1] => blue
[2] => 62
)
[1] => Array
(
[0] => female
[1] => red
[2] => 22
)
[2] => Array
(
[0] => male
[1] => blue
[2] => 21
)
)
我在做这个:
foreach($dat as $row) {
if($row[0]=='female') {
$females = $females + $row[2];
}
}
但一定有一条没有循环的路!
难道没有类似sum($dat[][2])
的东西吗?
此样本的结果应为84
我好像误解了你的问题。。。
要获得总和,可以使用array_reduce
而不是foreach
循环(尽管这不会有太大改进):
array_reduce($dat, function($prev,$curr){return $prev+($curr[0]==='female'?$curr[2]:0);}, 0);
要获得包含"雌性"的元素数量,可以使用count
和array_filter
:
echo count(array_filter($dat, function($x){return in_array('female', $x);}));
这会过滤数组中包含字符串female
的任何子数组,并返回元素数。
如果您确信字符串'female'
始终是数组的第零个元素,则可以稍微简化函数:
echo count(array_filter($dat, function($x){return $x[0]==='female';}));
您可以用这种方式将数组array_reduce
求和:
$array[0] = array('female', 2);
$array[1] = array('female', 5);
$array[2] = array('male', 2);
$sum = array_reduce($array, function ($value, $item) {
if ($item[0] == 'female') $value += $item[1];
return $value;
}, 0);
var_dump($sum);
输出:
7