php-doc-en/reference/array/functions/count.xml
Nikita Popov cccd50e8ed Remove redundant note in count() docs
Follows from general PHP behavior (undefined variable reads as NULL) and discusses something nobody should be doing in the first place. This was probably more relevant ten years ago than it is now.

git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@345126 c90b9560-bf6c-de11-be94-00142212c4b1
2018-06-13 14:15:05 +00:00

191 lines
5.2 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<refentry xml:id="function.count" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>count</refname>
<refpurpose>Count all elements in an array, or something in an object</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>count</methodname>
<methodparam><type>mixed</type><parameter>array_or_countable</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>mode</parameter><initializer>COUNT_NORMAL</initializer></methodparam>
</methodsynopsis>
<para>
Counts all elements in an array, or something in an object.
</para>
<para>
For objects, if you have
<link linkend="ref.spl">SPL</link> installed, you can hook into
<function>count</function> by implementing interface
<classname>Countable</classname>. The interface has exactly one method,
<methodname>Countable::count</methodname>, which returns the return value for the
<function>count</function> function.
</para>
<para>
Please see the <link linkend="language.types.array">Array</link>
section of the manual for a detailed explanation of how arrays
are implemented and used in PHP.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>array_or_countable</parameter></term>
<listitem>
<para>
An array or <classname>Countable</classname> object.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>mode</parameter></term>
<listitem>
<para>
If the optional <parameter>mode</parameter> parameter is set to
<constant>COUNT_RECURSIVE</constant> (or 1), <function>count</function>
will recursively count the array. This is particularly useful for
counting all the elements of a multidimensional array.
</para>
<caution>
<para>
<function>count</function> can detect recursion to avoid an infinite
loop, but will emit an <constant>E_WARNING</constant> every time it
does (in case the array contains itself more than once) and return a
count higher than may be expected.
</para>
</caution>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Returns the number of elements in <parameter>array_or_countable</parameter>.
When the parameter is neither an array nor an object with
implemented <classname>Countable</classname> interface,
<literal>1</literal> will be returned.
There is one exception, if <parameter>array_or_countable</parameter> is &null;,
<literal>0</literal> will be returned.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>count</function> example</title>
<programlisting role="php">
<![CDATA[
<?php
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
var_dump(count($a));
$b[0] = 7;
$b[5] = 9;
$b[10] = 11;
var_dump(count($b));
var_dump(count(null));
var_dump(count(false));
?>
]]>
</programlisting>
&example.outputs;
<screen role="php">
<![CDATA[
int(3)
int(3)
Warning: count(): Parameter must be an array or an object that implements Countable in … on line 12 // as of PHP 7.2
int(0)
Warning: count(): Parameter must be an array or an object that implements Countable in … on line 14 // as of PHP 7.2
int(1)
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Recursive <function>count</function> example</title>
<programlisting role="php">
<![CDATA[
<?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
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.2.0</entry>
<entry>
<function>count</function> will now yield a warning on invalid countable types
passed to the <parameter>array_or_countable</parameter> parameter.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>is_array</function></member>
<member><function>isset</function></member>
<member><function>empty</function></member>
<member><function>strlen</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->