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/extract.xml
2021-01-16 19:32:18 +03:00

273 lines
12 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: 4a7ddddc27271967b616ad3400cfbe2a9b48212b Maintainer: shein Status: ready -->
<!-- Reviewed: yes -->
<!-- $Revision$ -->
<refentry xml:id="function.extract" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>extract</refname>
<refpurpose>Импортирует переменные из массива в текущую таблицу символов</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>int</type><methodname>extract</methodname>
<methodparam><type>array</type><parameter role="reference">array</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer><constant>EXTR_OVERWRITE</constant></initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>prefix</parameter><initializer>""</initializer></methodparam>
</methodsynopsis>
<para>
Импортирует переменные из массива в текущую таблицу символов.
</para>
<para>
Каждый ключ проверяется на предмет корректного имени переменной.
Также проверяются совпадения с существующими переменными в
символьной таблице.
</para>
<warning>
<para>
Не используйте <function>extract</function> на непроверенных данных, таких как пользовательский ввод
(например, <varname>$_GET</varname>, <varname>$_FILES</varname>).
</para>
</warning>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>array</parameter></term>
<listitem>
<para>
Ассоциативный массив. Эта функция рассматривает ключи массива
в качестве имён переменных, а их значения - в качестве значений
этих переменных. Для каждой пары ключ/значение будет создана
переменная в текущей таблице символов, в соответствии с
параметрами <parameter>flags</parameter> и
<parameter>prefix</parameter>.
</para>
<para>
Вы должны использовать ассоциативный массив, использование
числовых массивов не приведёт ни к каким результатам,
если вы не используете <constant>EXTR_PREFIX_ALL</constant>
или <constant>EXTR_PREFIX_INVALID</constant>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
Параметр <parameter>flags</parameter> определяет способ
трактования неправильных/числовых ключей и коллизий. Он может
принимать следующие значения:
<variablelist>
<varlistentry>
<term><constant>EXTR_OVERWRITE</constant></term>
<listitem>
<simpara>
Если переменная с таким именем существует, она будет перезаписана.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_SKIP</constant></term>
<listitem>
<simpara>
Если переменная с таким именем существует, её текущее значение
не будет перезаписано.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_SAME</constant></term>
<listitem>
<simpara>Если переменная с таким именем существует, к её имени
будет добавлен префикс, определённый параметром
<parameter>prefix</parameter>.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_ALL</constant></term>
<listitem>
<simpara>
Добавить префикс <parameter>prefix</parameter> ко всем именам переменных.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_INVALID</constant></term>
<listitem>
<simpara>
Добавить префикс <parameter>prefix</parameter> только к
некорректным/числовым именам переменных.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_IF_EXISTS</constant></term>
<listitem>
<simpara>
Перезаписать только переменные, уже имеющиеся в текущей
таблице символов, в противном случае не делать ничего.
Данная возможность полезна для определения списка
приемлемых переменных и для извлечения только тех
переменных, которые вы уже определили из массивов
типа <varname>$_REQUEST</varname>, например.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_PREFIX_IF_EXISTS</constant></term>
<listitem>
<simpara>
Создать только префикс-версии переменных, если версия
данной переменной без префикса уже существует в текущей символьной таблице.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><constant>EXTR_REFS</constant></term>
<listitem>
<simpara>
Извлечь переменные как ссылки. Это означает, что
значения таких переменных будут всё ещё ссылаться на
значения массива <parameter>array</parameter>.
Вы можете использовать этот флаг отдельно или
комбинировать его с другими значениями
<parameter>flags</parameter> с помощью побитового 'или'.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>
Если <parameter>flags</parameter> не указан, он
трактуется как <constant>EXTR_OVERWRITE</constant>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>prefix</parameter></term>
<listitem>
<para>
Обратите внимание, что <parameter>prefix</parameter> имеет
значение, только если <parameter>flags</parameter>
установлен в <constant>EXTR_PREFIX_SAME</constant>,
<constant>EXTR_PREFIX_ALL</constant>,
<constant>EXTR_PREFIX_INVALID</constant>
или <constant>EXTR_PREFIX_IF_EXISTS</constant>. Если
в результате добавления префикса, не будет получено
допустимое имя для переменной, она не будет импортирована
в текущую символьную таблицу.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает количество переменных, успешно импортированных в
текущую таблицу символов.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>extract</function></title>
<para>
Функцию <function>extract</function> также можно использовать
для импорта в текущую таблицу символов переменных,
содержащиеся в ассоциативном массиве, возвращаемом функцией
<function>wddx_deserialize</function>.
</para>
<programlisting role="php">
<![CDATA[
<?php
/* Предположим, что $var_array - это массив, полученный в результате
wddx_deserialize */
$size = "large";
$var_array = array("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $size, $shape, $wddx_size\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
blue, large, sphere, medium
]]>
</screen>
<para>
Переменная <varname>$size</varname> не была перезаписана,
потому что мы определили <constant>EXTR_PREFIX_SAME</constant>,
в результате чего была создана переменная <varname>$wddx_size</varname>.
Если был бы определён флаг <constant>EXTR_SKIP</constant>,
тогда переменная <varname>$wddx_size</varname> не была бы создана.
<constant>EXTR_OVERWRITE</constant> была бы причиной того,
что переменной <varname>$size</varname> было бы присвоено
значение "medium", и <constant>EXTR_PREFIX_ALL</constant>
была бы причиной того, что были бы также созданы новые
переменные <varname>$wddx_color</varname>,
<varname>$wddx_size</varname> и <varname>$wddx_shape</varname>.
</para>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<warning>
<para>
Не используйте функцию <function>extract</function> на
непроверенных данных, таких как пользовательский ввод
(<varname>$_GET</varname>, <varname>$_FILES</varname> и т.п.).
Если вы сделаете это, убедитесь, что используете один из флагов <parameter>flags</parameter>,
не перезаписывающие переменные, такой как
<constant>EXTR_SKIP</constant> и имейте в виду,
что вы должны извлекать их в том порядке, который определён в
директиве <link linkend="ini.variables-order">variables_order</link>
внутри <link linkend="ini">&php.ini;</link>.
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>compact</function></member>
<member><function>list</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
-->