Skip to content

Commit

Permalink
Update usort.xml to en + infostyle
Browse files Browse the repository at this point in the history
  • Loading branch information
mmalferov authored Feb 6, 2025
1 parent f9c4a23 commit 8f56ff1
Showing 1 changed file with 39 additions and 23 deletions.
62 changes: 39 additions & 23 deletions reference/array/functions/usort.xml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 2226ad08fd93e3979efbba47c5ae3545eec97d25 Maintainer: shein Status: ready -->
<!-- EN-Revision: 5d19b00f2f70fa61eee46fee4049b625a8a9bfd2 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.usort" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>usort</refname>
<refpurpose>Сортирует массив по значениям используя пользовательскую функцию для сравнения элементов</refpurpose>
<refpurpose>Сортирует массив по значениям через пользовательскую функцию сравнения элементов</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
Expand All @@ -14,8 +14,8 @@
<methodparam><type>callable</type><parameter>callback</parameter></methodparam>
</methodsynopsis>
<para>
Сортирует <parameter>array</parameter> по значениям,
используя предоставленную пользователем функцию сравнения для определения порядка.
Функция сортирует массив <parameter>array</parameter> на месте по значениям
путем обработки элементов массива пользовательской функцией сравнения для определения порядка.
</para>
&note.sort-unstable;
&note.no-key-association;
Expand Down Expand Up @@ -72,15 +72,17 @@
&reftitle.examples;
<para>
<example xml:id="function.usort.examples.basic">
<title>Пример использования <function>usort</function></title>
<title>Пример сортировки массива функцией <function>usort</function></title>
<programlisting role="php">
<![CDATA[
<?php
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
Expand All @@ -91,6 +93,7 @@ usort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>
]]>
</programlisting>
Expand All @@ -105,12 +108,13 @@ foreach ($a as $key => $value) {
]]>
</screen>
<para>
Для ещё большего упрощения внутреннего сравнения можно
использовать оператор spaceship (космический корабль).
Для ещё большего упрощения внутреннего сравнения
указывают оператор «космический корабль» (англ. spaceship).
</para>
<programlisting role="php">
<![CDATA[
<?php
function cmp($a, $b)
{
return $a <=> $b;
Expand All @@ -123,25 +127,27 @@ usort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>
]]>
</programlisting>
</example>
</para>
<note>
<para>
Очевидно, что для этого тривиального случая более подходит функция
<function>sort</function>.
Ясно, что в этом тривиальном случае функция
<function>sort</function> была бы уместнее.
</para>
</note>
<para>
<example xml:id="function.usort.examples.multi">
<title>
Пример использования функции <function>usort</function> с многомерными массивами
Пример сортировки функцией <function>usort</function> многомерного массива
</title>
<programlisting role="php">
<![CDATA[
<?php
function cmp($a, $b)
{
return strcmp($a["fruit"], $b["fruit"]);
Expand All @@ -156,12 +162,13 @@ usort($fruits, "cmp");
foreach ($fruits as $key => $value) {
echo "\$fruits[$key]: " . $value["fruit"] . "\n";
}
?>
]]>
</programlisting>
<para>
При сортировке многомерного массива переменные <varname>$a</varname> и
<varname>$b</varname> содержат ссылки на первые два индекса массива.
При сортировке многомерного массива переменные <varname>$a</varname>
и <varname>$b</varname> содержат ссылки на первые два индекса массива.
</para>
&example.outputs;
<screen>
Expand All @@ -176,20 +183,22 @@ $fruits[2]: lemons
<para>
<example xml:id="function.usort.examples.object">
<title>
Пример использования <function>usort</function> с методом класса
Пример сортировки массива функцией <function>usort</function> через функцию-член объекта
</title>
<programlisting role="php">
<![CDATA[
<?php
class TestObj {
private string $name;
class TestObj
{
public string $name;
function __construct($name)
{
$this->name = $name;
}
/* This is the static comparing function: */
/* Статическая функция сравнения: */
static function cmp_obj($a, $b)
{
return strtolower($a->name) <=> strtolower($b->name);
Expand All @@ -205,6 +214,7 @@ usort($a, [TestObj::class, "cmp_obj"]);
foreach ($a as $item) {
echo $item->name . "\n";
}
?>
]]>
</programlisting>
Expand All @@ -219,17 +229,19 @@ d
</example>
<example xml:id="function.usort.examples.closure">
<title>
Пример использования функции <function>usort</function> с применением <link linkend="functions.anonymous">анонимной функции</link>
Пример вызова функции <function>usort</function> <link linkend="functions.anonymous">с замыканием</link>
для сортировки многомерного массива
</title>
<programlisting role="php">
<![CDATA[
<?php
$array[0] = array('key_a' => 'z', 'key_b' => 'c');
$array[1] = array('key_a' => 'x', 'key_b' => 'b');
$array[2] = array('key_a' => 'y', 'key_b' => 'a');
function build_sorter($key) {
function build_sorter($key)
{
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
Expand All @@ -240,6 +252,7 @@ usort($array, build_sorter('key_b'));
foreach ($array as $item) {
echo $item['key_a'] . ', ' . $item['key_b'] . "\n";
}
?>
]]>
</programlisting>
Expand All @@ -254,21 +267,23 @@ z, c
</example>
<example xml:id="function.usort.examples.multiple-axes">
<title>
Пример использования <function>usort</function> с оператором spaceship (космический корабль)
Пример работы функции <function>usort</function> с оператором «космический корабль»
</title>
<para>
Оператор spaceship (космический корабль) позволяет прямолинейно сравнивать составные
значения по нескольким осям. В следующем примере
<literal>$people</literal> сортируется по фамилии, а затем по имени, если фамилия совпадает.
Оператор «космический корабль» упрощает сравнение
составных значений по набору критериев. В следующем примере
функция сортирует массив <literal>$people</literal> по фамилии, а затем по имени, если фамилии совпадают.
</para>
<programlisting role="php">
<![CDATA[
<?php
$people[0] = ['first' => 'Adam', 'last' => 'West'];
$people[1] = ['first' => 'Alec', 'last' => 'Baldwin'];
$people[2] = ['first' => 'Adam', 'last' => 'Baldwin'];
function sorter(array $a, array $b) {
function sorter(array $a, array $b)
{
return [$a['last'], $a['first']] <=> [$b['last'], $b['first']];
}
Expand All @@ -277,6 +292,7 @@ usort($people, 'sorter');
foreach ($people as $person) {
print $person['last'] . ', ' . $person['first'] . PHP_EOL;
}
?>
]]>
</programlisting>
Expand Down

0 comments on commit 8f56ff1

Please sign in to comment.