Files
php-doc-ru/reference/array/functions/array-diff.xml
2021-01-05 20:16:26 +03:00

181 lines
5.4 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.array-diff" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>array_diff</refname>
<refpurpose>Вычислить расхождение массивов</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>array_diff</methodname>
<methodparam><type>array</type><parameter>array</parameter></methodparam>
<methodparam rep="repeat"><type>array</type><parameter>arrays</parameter></methodparam>
</methodsynopsis>
<para>
Сравнивает <parameter>array</parameter> с одним или несколькими другими массивами
и возвращает значения из <parameter>array</parameter>, которые отсутствуют
во всех других массивах.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>array</parameter></term>
<listitem>
<para>
Исходный массив
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>arrays</parameter></term>
<listitem>
<para>
Массивы, с которыми идёт сравнение
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает массив (<type>array</type>), содержащий элементы
<parameter>array</parameter>, отсутствующие в любом из всех остальных
массивов.
Ключи в массиве <parameter>array</parameter> сохраняются.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>array_diff</function></title>
<programlisting role="php">
<![CDATA[
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
?>
]]>
</programlisting>
<para>
Множественные совпадения в <varname>$array1</varname> обрабатываются
как одно. Результат будет следующим:
</para>
<screen>
<![CDATA[
Array
(
[1] => blue
)
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Пример использования <function>array_diff</function> с несовпадающими типами</title>
<para>
Два элемента считаются равными тогда и только тогда, когда
<literal>(string) $elem1 === (string) $elem2</literal>. То есть,
когда <link linkend="language.types.string.casting">строковое представление</link> одинаково.
</para>
<programlisting role="php">
<![CDATA[
<?php
// Это сгенерирует уведомление о том, что массив не может быть преобразован в строку.
$source = [1, 2, 3, 4];
$filter = [3, 4, [5], 6];
$result = array_diff($source, $filter);
// В то же время это нормально, поскольку объекты могут быть преобразованы в строку.
class S {
private $v;
public function __construct(string $v) {
$this->v = $v;
}
public function __toString() {
return $this->v;
}
}
$source = [new S('a'), new S('b'), new S('c')];
$filter = [new S('b'), new S('c'), new S('d')];
$result = array_diff($source, $filter);
// $result теперь содержит один экземпляр S('a');
?>
]]>
</programlisting>
<para>
Чтобы использовать альтернативную функцию сравнения, смотрите <function>array_udiff</function>.
</para>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Обратите внимание, что эта функция обрабатывает только одно измерение
n-размерного массива. Естественно, вы можете обрабатывать и более
глубокие уровни вложенности, например, используя
<literal>array_diff($array1[0], $array2[0]);</literal>.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>array_diff_assoc</function></member>
<member><function>array_udiff</function></member>
<member><function>array_intersect</function></member>
<member><function>array_intersect_assoc</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
-->