没有循环的多维数组中的列的总和

时间:2015-03-05 10:07:34

标签: php arrays multidimensional-array

我习惯于分析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

2 个答案:

答案 0 :(得分:1)

我似乎误解了你的问题......

要获得总和,您可以使用array_reduce代替foreach循环(虽然这不会有太大改进):

array_reduce($dat, function($prev,$curr){return $prev+($curr[0]==='female'?$curr[2]:0);}, 0);

要获取包含“女性”的元素数量,您可以将countarray_filter一起使用:

echo count(array_filter($dat, function($x){return in_array('female', $x);}));

这会过滤包含字符串female的任何子数组的数组,并返回元素数。

如果您确定字符串'female'始终是数组的第0个元素,则可以稍微简化该函数:

echo count(array_filter($dat, function($x){return $x[0]==='female';}));

答案 1 :(得分:0)

您可以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