PHP Count значения массива - PullRequest
       2

PHP Count значения массива

0 голосов
/ 24 августа 2011

Есть ли способ подсчета значений многомерного массива ()?

$families = array
(
"Test"=>array
(
  "test1",
  "test2",
  "test3"
)
); 

Так, например, я бы хотел посчитать 3 значения в массиве "Test" ... ('test1', 'test2', 'test3')?

Ответы [ 5 ]

4 голосов
/ 24 августа 2011
$families = array
(
"Test"=>array
(
  "test1",
  "test2",
  "test3"
)
); 

echo count($families["Test"]);
1 голос
/ 24 августа 2011

Я думаю, что я только что придумал довольно другой способ подсчета элементов (неограниченного) массива MD.

<?php

$array = array("ab", "cd", array("ef", "gh", array("ij")), "kl");

$i = 0;
array_walk_recursive($array, function() { global $i; return ++$i; });
echo $i;

?>

Возможно, не самый экономичный способ подсчета, но, похоже, он работает! Внутри анонимной функции вы можете добавить элемент только к подсчитанному итогу, если он имеет непустое значение, например, если вы хотите расширить функциональность. Пример чего-то похожего можно увидеть здесь:

<?php

$array = array("ab", "cd", array("ef", "gh", array("ij")), "kl");

$i = 0;
array_walk_recursive($array, function($value, $key) { global $i; if ($value == 'gh') ++$i; });
echo $i;

?>
0 голосов
/ 24 августа 2011
function countArrayValues($ar, $count_arrays = false) {
    $cnt = 0;
    foreach ($ar as $key => $val) {
        if (is_array($ar[$key])) {
            if ($count_arrays)
                $cnt++;
            $cnt += countArrayValues($ar);
        }
        else
            $cnt++;
    }
    return $cnt;
}

это пользовательская функция, написанная мной, просто передайте массив, и вы получите полное количество значений.Этот метод не будет подсчитывать элементы, которые являются массивами, если вы передаете второй параметр как false, или вы ничего не передаете.Пройдите tru, если вы хотите их посчитать.

$count = countArrayValues($your_array);
0 голосов
/ 24 августа 2011

Статический массив:

echo 'Test has ' . count($families['test']) . ' family members';

Если вы не знаете, как долго будет длиться ваш массив:

foreach($families as $familyName => $familyMembers)
{
    echo $familyName . ' has got ' . count($familyMembers) . ' family members.';
}
0 голосов
/ 24 августа 2011

Метод count должен привести вас туда. В зависимости от вашей реальной проблемы вам, возможно, потребуется написать некоторый (рекурсивный) цикл для суммирования всех элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...