1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-27 01:02:19 +01:00
Files
archived-doc-ru/reference/array/functions/list.xml
2021-01-05 20:16:26 +03:00

362 lines
9.9 KiB
XML
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"?>
<!-- EN-Revision: 9e0f03ac354d797d1d16c0fcc1663e5e170f2727 Maintainer: shein Status: ready -->
<!-- Reviewed: yes -->
<!-- $Revision$ -->
<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> используется
для того, чтобы присвоить списку переменных значения за одну операцию.
</para>
<note>
<para>
До PHP 7.1.0, <function>list</function> работала только с индексированными массивами и принимала числовые индексы начиная с 0.
</para>
</note>
<warning>
<para>
В PHP 5 <function>list</function> присваивает значения начиная с самого правого.
В PHP 7 <function>list</function> - с самого левого.
</para>
<para>
Если вы используете обычные переменные, можете не думать об этом, но, если вы
используете массивы с индексами, вы ожидаете, что порядок элементов в массиве
будет ровно таким, как вы его определили в <function>list</function>, слева направо,
но в PHP 5 вы получите обратный порядок.
</para>
<para>
Вообще говоря, желательно не полагаться на конкретный порядок операций, так как
в будущем это поведение может быть изменено.
</para>
</warning>
</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>
<row>
<entry>7.0.0</entry>
<entry>
Изменён порядок операций присвоения.
</entry>
</row>
<row>
<entry>7.0.0</entry>
<entry>
Выражение <function>list</function> больше не может быть полностью пустым.
</entry>
</row>
<row>
<entry>7.0.0</entry>
<entry>
Больше нельзя разбирать строки с помощью этой функции.
</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('кофе', 'коричневый', 'кофеин');
// Составить список всех переменных
list($drink, $color, $power) = $info;
echo "$drink - $color, а $power делает его особенным.\n";
// Составить список только некоторых из них
list($drink, , $power) = $info;
echo "В $drink есть $power.\n";
// Или пропустить все, кроме третьей
list( , , $power) = $info;
echo "Мне нужен $power!\n";
// list() не работает со строками
list($bar) = "abcde";
var_dump($bar); // NULL
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Пример использования <function>list</function></title>
<programlisting role="php">
<![CDATA[
<table>
<tr>
<th>Имя работника</th>
<th>Зарплата</th>
</tr>
<?php
$result = $pdo->query("SELECT id, name, salary FROM employees");
while (list($id, $name, $salary) = $result->fetch(PDO::FETCH_NUM)) {
echo " <tr>\n" .
" <td><a href=\"info.php?id=$id\">$name</a></td>\n" .
" <td>$salary</td>\n" .
" </tr>\n";
}
?>
</table>
]]>
</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>
<screen>
<![CDATA[
int(1)
int(2)
int(3)
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Использование <function>list</function> с индексами массива</title>
<programlisting role="php">
<![CDATA[
<?php
$info = array('кофе', 'коричневый', 'кофеин');
list($a[0], $a[1], $a[2]) = $info;
var_dump($a);
?>
]]>
</programlisting>
<para>
Выведет (сравните порядок исходных элементов с порядком,
в котором они были перезаписаны <function>list</function>):
</para>
&example.outputs.7;
<screen>
<![CDATA[
array(3) {
[0]=>
string(6) "кофе"
[1]=>
string(5) "коричневый"
[2]=>
string(8) "кофеин"
}
]]>
</screen>
&example.outputs.5;
<screen>
<![CDATA[
array(3) {
[2]=>
string(8) "кофеин"
[1]=>
string(5) "коричневый"
[0]=>
string(6) "кофе"
}
]]>
</screen>
</example>
</para>
<para>
<example>
<title><function>list</function> и порядок указания индексов</title>
<simpara>
Порядок, в котором индексы массива будут использоваться функцией
<function>list</function>, не имеет значения.
</simpara>
<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
-->