1
0
mirror of https://github.com/php/doc-zh.git synced 2026-03-24 07:02:15 +01:00
Files
2025-10-20 01:21:56 +08:00

276 lines
6.7 KiB
XML
Executable File
Raw Permalink 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: eaec4ab10a65c4515ee2fb899d06e89bae3754b0 Maintainer: daijie Status: ready -->
<!-- CREDITS: mowangjuanzi -->
<refentry xml:id="function.list" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>list</refname>
<refpurpose>把数组中的值赋给一组变量 </refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>list</methodname>
<methodparam><type>mixed</type><parameter>var</parameter></methodparam>
<methodparam rep="repeat" choice="opt"><type>mixed</type><parameter>vars</parameter></methodparam>
</methodsynopsis>
<para>
<function>array</function> 一样,这不是真正的函数,而是语言结构。
<function>list</function> 可以在单次操作内为一组变量赋值。仅数组和实现了
<link linkend="class.arrayaccess">ArrayAccess</link>
的对象可以解包。<function>list</function> 表达式不能为空。
</para>
<note>
<para>
在 PHP 7.1.0 之前的版本,<function>list</function> 仅能用于数字索引的数组,并假定数字索引从 0 开始。
</para>
</note>
<para>
自 PHP 7.1.0 起,<function>list</function> 还可以包含指定的 key从而允许使用非整数或非连续 key
解构数组。有关数组解构的更多详细信息,请参阅<link linkend="language.types.array.syntax.destructuring">数组解构部分</link>
</para>
<note>
<para>
尝试访问未定义的数组 key 与访问其他未定义变量相同:将发出 <constant>E_WARNING</constant>
级别的错误消息(在 PHP 8.0.0 之前为 <constant>E_NOTICE</constant> 级别),并且结果为 &null;
</para>
<para>
尝试解包标量会将所有变量赋值为 &null;。尝试解包未实现 ArrayAccess 的对象会导致严重错误。
</para>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>var</parameter></term>
<listitem>
<para>
一个变量。
</para>
</listitem>
</varlistentry>
</variablelist>
<variablelist>
<varlistentry>
<term><parameter>vars</parameter></term>
<listitem>
<para>
更多变量。
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
返回指定的数组。
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.3.0</entry>
<entry>
支持在数组解构时传引用。
</entry>
</row>
<row>
<entry>7.1.0</entry>
<entry>
现在可以指定 <function>list</function> 中的键。
这就可以解构非数字键或者无顺序的数组。
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>list</function> 示例</title>
<programlisting role="php">
<![CDATA[
<?php
$info = array('coffee', 'brown', 'caffeine');
// 列出所有变量
list($drink, $color, $power) = $info;
echo "$drink is $color and $power makes it special.\n";
// 列出他们的其中一个
list($drink, , $power) = $info;
echo "$drink has $power.\n";
// 或者让我们跳到仅第三个
list( , , $power) = $info;
echo "I need $power!\n";
// list() 不能对字符串起作用
list($bar) = "abcde";
var_dump($bar); // NULL
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>使用 <function>list</function> 的示例</title>
<programlisting role="php" annotations="non-interactive">
<![CDATA[
<?php
$result = $pdo->query("SELECT id, name FROM employees");
while (list($id, $name) = $result->fetch(PDO::FETCH_NUM)) {
echo "id: $id, name: $name\n";
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>使用嵌套的 <function>list</function></title>
<programlisting role="php">
<![CDATA[
<?php
list($a, list($b, $c)) = array(1, array(2, 3));
var_dump($a, $b, $c);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
int(1)
int(2)
int(3)
]]>
</screen>
</example>
</para>
<para>
<function>list</function> 使用 array 索引的顺序和它何时定义无关。
</para>
<para>
<example>
<title><function>list</function> 和索引顺序定义</title>
<programlisting role="php">
<![CDATA[
<?php
$foo = array(2 => 'a', 'foo' => 'b', 0 => 'c');
$foo[1] = 'd';
list($x, $y, $z) = $foo;
var_dump($foo, $x, $y, $z);
]]>
</programlisting>
<para>
得到以下输出(注意比较 <function>list</function> 所写的元素顺序):
</para>
<screen>
<![CDATA[
array(4) {
[2]=>
string(1) "a"
["foo"]=>
string(1) "b"
[0]=>
string(1) "c"
[1]=>
string(1) "d"
}
string(1) "c"
string(1) "d"
string(1) "a"
]]>
</screen>
</example>
</para>
<para>
<example>
<title>带键的 <function>list</function></title>
<simpara>
从 PHP 7.1.0 开始,<function>list</function> 可以包含显式的键,可赋值到任意表达式。
可以混合使用数字和字符串键。但是不能混合有键和无键不能混用。
</simpara>
<programlisting role="php">
<![CDATA[
<?php
$data = [
["id" => 1, "name" => 'Tom'],
["id" => 2, "name" => 'Fred'],
];
foreach ($data as ["id" => $id, "name" => $name]) {
echo "id: $id, name: $name\n";
}
echo PHP_EOL;
list(1 => $second, 3 => $fourth) = [1, 2, 3, 4];
echo "$second, $fourth\n";
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
id: 1, name: Tom
id: 2, name: Fred
2, 4
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>each</function></member>
<member><function>array</function></member>
<member><function>extract</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
-->