Функция PHP Count с ассоциативным массивом - PullRequest
10 голосов
/ 28 сентября 2011

Может кто-нибудь объяснить мне, как работает функция подсчета с массивами, подобными приведенным ниже?

Я думаю, что для вывода 4 будет следующий код, потому что там 4 элемента:

$a = array 
(
  "1" => "A",
   1=> "B",
   "C",
   2 =>"D"
);

echo count($a);

Ответы [ 3 ]

28 голосов
/ 28 сентября 2011

count работает точно так, как вы ожидаете, например, он подсчитывает все элементы в массиве (или объекте) .Но ваше предположение о массиве, содержащем четыре элемента, неверно:

  • «1» равно 1, поэтому 1 => "B" будет перезаписывать "1" => "A".
  • , поскольку вы определили 1, следующим числовым индексом будет 2, например, "C" равно 2 => "C"
  • , когда вы присвоили 2 => "D", что вы перезаписали "C".

Таким образом, ваш массив будет содержать только 1 => "B" и 2 => "D", и поэтому count дает 2. Вы можете убедиться в этом, выполнив print_r($a).Это даст

Array
(
    [1] => B
    [2] => D
)

Пожалуйста, повторите http://www.php.net/manual/en/language.types.array.php снова.

7 голосов
/ 28 сентября 2011

Вы можете использовать этот пример, чтобы понять, как подсчет работает с рекурсивными массивами

<?php
$food = array('fruits' => array('orange', 'banana', 'apple'),
              'veggie' => array('carrot', 'collard', 'pea'));

// recursive count
echo count($food, COUNT_RECURSIVE); // output 8

// normal count
echo count($food); // output 2

?>

Источник

1 голос
/ 28 сентября 2011

В созданном вами массиве есть только два элемента, отсюда возвращается число 2. Вы перезаписываете элементы, чтобы увидеть, что в вашем массиве используется:

print_r($a);
...