Я привык к анализу данных в 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])
?
Вы можете 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
Кажется, я неверно истолковал ваш вопрос...
Чтобы получить сумму, вы можете использовать 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';}));