Может ли кто-нибудь объяснить мне, как функция count работает с массивами, подобными приведенной ниже?
Моей мыслью был бы следующий код для вывода 4, потому что там есть 4 элемента:
$a = array ( "1" => "A", 1=> "B", "C", 2 =>"D" ); echo count($a); 
          count работает точно так, как вы ожидали, например, он подсчитывает все элементы в массиве (или объекте) .  Но ваше предположение о массиве, содержащем четыре элемента, неверно: 
1 => "B" перезапишет "1" => "A" . 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 .
Вы можете использовать этот пример, чтобы понять, как счетчик работает с рекурсивными массивами
 <?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 ?> 
Источник
Массив, который вы создали, имеет только два элемента, поэтому возвращаемое число 2. Вы переписываете элементы, чтобы увидеть, что в вашем массиве используется:
 print_r($a);