1
0
mirror of https://github.com/php/doc-zh.git synced 2026-03-26 08:02:16 +01:00
Files
archived-doc-zh/reference/array/functions/count.xml
2022-01-30 22:32:44 +08:00

265 lines
6.5 KiB
XML
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 3ef3e56c80f7ae6b6a7291b7eb57dc6250b50801 Maintainer: daijie Status: ready -->
<refentry xml:id="function.count" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>count</refname>
<refpurpose>统计数组、<interfacename>Countable</interfacename> 对象中所有元素的数量</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>count</methodname>
<methodparam><type class="union"><type>Countable</type><type>array</type></type><parameter>value</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>mode</parameter><initializer><constant>COUNT_NORMAL</constant></initializer></methodparam>
</methodsynopsis>
<para>
用于数组时,统计数组中元素的数量;用于实现了 <interfacename>Countable</interfacename>
接口的对象时,返回 <methodname>Countable::count</methodname> 方法的返回值。
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>value</parameter></term>
<listitem>
<para>
数组或者 <interfacename>Countable</interfacename> 对象。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>mode</parameter></term>
<listitem>
<para>
如果可选的 <parameter>mode</parameter> 参数设为
<constant>COUNT_RECURSIVE</constant>(或 1<function>count</function>
将递归地对数组计数。对计算多维数组的所有单元尤其有用。
</para>
<caution>
<para>
<function>count</function> 能检测递归来避免无限循环,但每次出现时会产生 <constant>E_WARNING</constant> 错误
(如果 array 不止一次包含了自身)并返回大于预期的统计数字。
</para>
</caution>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
返回 <parameter>value</parameter> 中的元素的数量。在 PHP 8.0.0
之前,如果参数既不是数组也不是实现了 <literal>Countable</literal> 接口的对象,将返回
<literal>1</literal>。当 <parameter>value</parameter>&null; 时返回
<literal>0</literal>
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.0.0</entry>
<entry>
<parameter>value</parameter> 参数传入了无效的 countable 类型,
<function>count</function> 现在会抛出 <classname>TypeError</classname>
</entry>
</row>
<row>
<entry>7.2.0</entry>
<entry>
<parameter>value</parameter> 参数传入了无效的 countable 类型,
<function>count</function> 现在会产生警告。
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example xml:id="count.example.basic">
<title><function>count</function> 例子</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));
?>
]]>
</programlisting>
&example.outputs;
<screen role="php">
<![CDATA[
int(3)
int(3)
]]>
</screen>
</example>
</para>
<para>
<example xml:id="count.example.badexample">
<title><function>count</function> 非 Countable|array 的例子 (这是个反例,请勿模仿)</title>
<programlisting role="php">
<![CDATA[
<?php
$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(0)
int(1)
]]>
</screen>
&example.outputs.72;
<screen role="php">
<![CDATA[
int(3)
Warning: count(): Parameter must be an array or an object that implements Countable in … on line 12
int(0)
Warning: count(): Parameter must be an array or an object that implements Countable in … on line 14
int(1)
]]>
</screen>
&example.outputs.8;
<screen role="php">
<![CDATA[
int(3)
Fatal error: Uncaught TypeError: count(): Argument #1 ($var) must be of type Countable .. on line 12
]]>
</screen>
</example>
</para>
<para>
<example xml:id="count.example.recursive">
<title>递归 <function>count</function> 例子</title>
<programlisting role="php">
<![CDATA[
<?php
$food = array('fruits' => array('orange', 'banana', 'apple'),
'veggie' => array('carrot', 'collard', 'pea'));
// 递归计数
var_dump(count($food, COUNT_RECURSIVE));
// 常规计数
var_dump(count($food));
?>
]]>
</programlisting>
&example.outputs;
<screen role="php">
<![CDATA[
int(8)
int(2)
]]>
</screen>
</example>
</para>
<para>
<example xml:id="count.example.countable">
<title><interfacename>Countable</interfacename> 对象</title>
<programlisting role="php">
<![CDATA[
<?php
class CountOfMethods implements Countable
{
private function someMethod()
{
}
public function count(): int
{
return count(get_class_methods($this));
}
}
$obj = new CountOfMethods();
var_dump(count($obj));
?>
]]>
</programlisting>
&example.outputs;
<screen role="php">
<![CDATA[
int(2)
]]>
</screen>
</example>
</para>
</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>
<member><function>is_countable</function></member>
<member><link linkend="language.types.array">Array 数组</link></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
-->