﻿<h1 class=p1>Функции сортировки массивов</h1>
<table border="0" cellspacing="10">
    <tr valign="top">
        <td>
            <a class=bluelink href="#1" title="Сортировка массива по возрастанию" >sort()</a>&nbsp;<br>
            <a class=bluelink href="#2" title="Сортировка массива по убыванию" >rsort()</a>&nbsp;<br>           
            <a class=bluelink href="#3" title="Сортировка ассоциативного массива по возрастанию">asort()</a>&nbsp;<br>      
        </td>
        <td>
            <a class=bluelink href="#4" title="Сортировка ассоциативного массива по убыванию">arsort()</a>&nbsp;<br>                    
            <a class=bluelink href="#5" title="Сортировка массива по возрастанию ключей">ksort()</a>&nbsp;<br>      
            <a class=bluelink href="#6" title="Сортировка массива по убыванию ключей">krsort()</a>&nbsp;<br>                                
        </td>
        <td>        
            <a class=bluelink href="#7" title="Расстановка элементов массива в обратном порядке">array_reverse()</a>&nbsp;<br>      
            <a class=bluelink href="#8" title="Перемешивает элементы массива случайным образом">shuffle()</a>&nbsp;<br>                             
            <a class=bluelink href="#9" title="Естественная сортировка массива">natsort()</a>&nbsp;<br>                                         
        </td>
    </tr>
</table>
<br>
<a name=1></a>
<h1 class=p1>sort()</h1>
<p class=text>Функция сортировки массива по возрастанию.</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
void <b>sort</b><em class=gr>(</em>array <b>array</b> [, int <b>sort_flags</b>]<em class=gr>)</em>
</pre></blockquote>
<p class=text>Функция сортирует массив <b>array</b> по возрастанию. Необязательный аргумент <b>sort_flags</b> указывает как именно должны сортироваться элементы (задает флаги сортировки). Допустимыми значениями этого аргумента являются следующие:</p>
<ul>
  <li>SORT_REGULAR – задает нормальное сравнение элементов (сравнивает элементы &quot;как есть&quot;)</li>
  <li>SORT_NUMERIC - сравнивает элементы как числа </li>
  <li>SORT_STRING - сравнивает элементы как строки</li>
</ul>

<p class=text>Вообще говоря, эта функция предназначена для сортировки списков. Под списком понимается массив, ключи которого начинаются с нуля и не имеют пропусков. Функция <b>sort</b>() воспринимает любой массив как список.</p>
<p class=text>Рассмотрим примерчик.</p>
<p class=prim><b><i>Пример:</i></b></p>
<blockquote><pre>
<em class=red>&lt;?</em>
   <b>$arr</b> <em class=gr>=</em> array<em class=gr>(</em>"2", "1", "4", "3","5"<em class=gr>);</em>
   sort<em class=gr>(</em><b>$arr</b><em class=gr>);</em>
   for<em class=gr>(</em><b>$i</b>=0<em class=gr>;</em> <b>$i</b> < count<em class=gr>(</em><b>$arr</b><em class=gr>);</em> <b>$i</b>++<em class=gr>)</em>
   <em class=gr>{
      echo (</em>"<b>$i</b>:<b>$arr</b>[<b>$i</b>]  "<em class=gr>);</em>
   <em class=gr>}</em> 
   <em class=comnt>// выводит "0:1 1:2 2:3 3:4 4:5"</em>
<em class=red>?&gt;</em>
</pre></blockquote>

<p class=prim><b><i>Результат:</i></b></p>
<table class="color1" width="100%" cellpadding="12" ><tr><td>
0:1  1:2  2:3  3:4  4:5  </td></tr></table>

<p class=text>Заметим такую вещь. Если вы сортируете строки, т.е, к примеру, массив выглядит вот так</p>
<blockquote><pre>
   array<em class=gr>(</em>"one", "two", "abs", "three", "uic", "for","five"<em class=gr>);</em>
</pre></blockquote>
<p class=text>то эта чудо-функция вернет вам следующее:</p>
<p class=prim><b><i>Результат:</i></b></p>
<table class="color1" width="100%" cellpadding="12" ><tr><td>
   0:abs 1:five 2:for 3:one 4:three 5:two 6:uic
</td></tr></table>
<p class=text>Т.е. строки она сортирует в так называемом альфа-бета порядке, попросту говоря – по старшинству первой буквы в алфавите.</p>
<br>

<a name=2></a>
<h1 class=p1>rsort()</h1>
<p class=text>Сортировка массива по убыванию.</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
void <b>rsort</b><em class=gr>(</em>array <b>arr</b> [, int <b>sort_flags</b>]<em class=gr>)</em>
</pre></blockquote>
<p class=text>Аналогична функции <b>sort</b>(), только сортирует по убыванию. Выполним тот же скрипт, что и для функции <b>sort</b>(), только вместо sort(<b>$arr</b>) поставим rsort(<b>$arr</b>). </p>
<p class=prim><b><i>Результат:</i></b></p>
<table class="color1" width="100%" cellpadding="12" ><tr><td>
0:5 1:4 2:3 3:2 4:1
</td></tr></table>
<br>

<a name=3></a>
<h1 class=p1>asort()</h1>
<p class=text>Сортировка ассоциативного массива по возрастанию.</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
void <b>asort</b><em class=gr>(</em>array <b>arr</b> [, int <b>sort_flags</b>]<em class=gr>)</em>
</pre></blockquote>
<p class=text>Функция <b>asort</b>() сортирует массив <b>arr</b> так, чтобы его значения шли в алфавитном (если это строки) или возрастающем (для чисел) порядке. Важное отличие этой функции от функции <b>sort</b>() состоит в том, что при применении функции <b>asort</b>()сохраняются связи между ключами и соответствующими им значениями, чего нет в функции <b>sort</b>() (там эти связи попросту разрываются).</p>
<p class=prim><b><i>Пример:</i></b></p>
<blockquote><pre>
<em class=red>&lt;?</em>
   <b>$arr</b> <em class=gr>=</em> array<em class=gr>(</em>"a" =>"one","b" => "two","c" => "three","d" => "four"<em class=gr>);</em>
   asort<em class=gr>(</em><b>$arr</b><em class=gr>);</em>
   foreach<em class=gr>(</em><b>$arr</b> <em class=gr>as</em> <b>$key</b> <em class=gr>=></em> <b>$val</b><em class=gr>)</em> 
   <em class=gr>{
      echo (</em>" <b>$key</b> => <b>$val</b> "<em class=gr>);
   }</em>
<em class=red>?&gt;</em>
</pre></blockquote>

<p class=prim><b><i>Результат:</i></b></p>
<table class="color1" width="100%" cellpadding="12" ><tr><td>
 d => four  a => one  c => three  b => two </td></tr></table>
<p class=text>Т.е., как видим, связи &quot;ключ-значение&quot; сохранились.</p>
<p class=text>По умолчанию функция <b>asort</b>() сортирует массив в алфавитном порядке. Значения флагов сортировки <b>sort_flags</b> приведены в описании функции <b>sort</b>().</p>
<br>

<a name=4></a>
<h1 class=p1>arsort()</h1>
<p class=text>Сортировка ассоциативного массива по убыванию.</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
void <b>arsort</b><em class=gr>(</em>array <b>arr</b> [, int <b>sort_flags</b>]<em class=gr>)</em>
</pre></blockquote>
<p class=text>Эта функция аналогична функции <b>asort</b>(), только она упорядочивает массив не по возрастанию, а по убыванию.</p>
<br>

<a name=5></a>
<h1 class=p1>ksort()</h1>
<p class=text>Сортировка массива по возрастанию ключей.</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
int <b>ksort</b><em class=gr>(</em>array <b>arr</b> [, int <b>sort_flags</b>]<em class=gr>)</em>
</pre></blockquote>
<p class=text>В этой функции сортировка осуществляется не по значениям, а по ключам в порядке их возрастания.</p>
<blockquote><pre>
<em class=red>&lt;?</em>
   <b>$arr</b> <em class=gr>=</em> array<em class=gr>(</em>"a" =>"one","b" => "two","c" => "three","d" => "four"<em class=gr>);</em>
   ksort<em class=gr>(</em><b>$arr</b><em class=gr>);</em>
   foreach<em class=gr>(</em><b>$arr</b> <em class=gr>as</em> <b>$key</b> <em class=gr>=></em> <b>$val</b><em class=gr>) 
   {
      echo (</em>" <b>$key</b> <em class=gr>=></em> <b>$val</b> "<em class=gr>);
   }</em>
<em class=red>?&gt;</em>
</pre></blockquote>
<p class=prim><b><i>Результат:</i></b></p>
<table class="color1" width="100%" cellpadding="12" ><tr><td>
 a => one  b => two  c => three  d => four </td></tr></table>
<br>

<a name=6></a>
<h1 class=p1>krsort()</h1>
<p class=text>Сортировка массива по убыванию индексов.</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
int <b>krsort</b><em class=gr>(</em>array <b>arr</b> [, int <b>sort_flags</b>]<em class=gr>)</em>
</pre></blockquote>
<p class=text>То же самое, что и функция <b>ksort</b>(), только упорядочивает массив по ключам в обратном порядке (по убыванию).</p>
<br>

<a name=7></a>
<h1 class=p1>array_reverse()</h1>
<p class=text>Расстановка элементов массива в обратном порядке.</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
array <b>array_reverse</b><em class=gr>(</em>array <b>arr</b> [, bool <b>preserve_keys</b>]<em class=gr>)</em>
</pre></blockquote>
<p class=text>Функция <b>array_reverse</b>() возвращает массив, элементы которого следуют в обратном порядке относительно массива <b>arr</b>, переданного в параметре. При этом связи между ключами и значениями сохраняются. Можно еще необязательный параметр <b>preserve_keys</b> сделать <b>true</b>, тогда в обратном порядке переставятся еще и ключи.</p>
<p class=text>Своруем идейку примерчика на эту функцию из php-шного мануала:</p>
<blockquote><pre>
<em class=red>&lt;?</em>
   <b>$arr</b> <em class=gr>=</em> array <em class=gr>(</em>"php", 4.0, array <em class=gr>(</em>"green", "red"<em class=gr>));</em>
   <b>$result</b> <em class=gr>=</em> array_reverse <em class=gr>(</em><b>$arr</b><em class=gr>);</em>
   <em class=gr>echo</em> "Массив: &lt;<b>br</b>>"<em class=gr>;</em>   
   foreach<em class=gr>(</em><b>$result</b> <em class=gr>as</em> <b>$key</b> <em class=gr>=></em> <b>$val</b><em class=gr>) 
   {
      echo (</em>"<b>$key</b> <em class=gr>=></em> <b>$val</b> &lt;<b>br</b>>"<em class=gr>);
   }
   echo(</em>"&lt;<b>br</b>>"<em class=gr>);</em>
   <em class=gr>echo</em> "Сортированный массив: &lt;<b>br</b>>"<em class=gr>;</em>      
   <b>$result_keyed</b> <em class=gr>=</em> array_reverse <em class=gr>(</em><b>$arr</b>, <em class=gr>false);
   foreach(<b>$result_keyed</b> as <b>$key</b> => <b>$val</b>) 
   {
      echo (</em>"<b>$key</b> <em class=gr>=></em> <b>$val</b>&lt;<b>br</b>> "<em class=gr>);
   }</em>
<em class=red>?&gt;</em>
</pre></blockquote>

<p class=text>Т.е., что получилось:</p>
<p class=text>В первом случае:</p>
<p class=prim><b><i>Результат:</i></b></p>
<table class="color1" width="100%" cellpadding="12" ><tr><td>
Массив: <br>0 =>Array <br>1 =>4 <br>2 =>php <br><br>Сортированный массив: <br>0 =>Array <br>1 =>4 <br>2 =>php <br></td></tr></table>

<p class=text>А если еще и второй параметр как <b>true</b> засобачить, то вот что выйдет:</p>
<p class=prim><b><i>Результат:</i></b></p>
<table class="color1" width="100%" cellpadding="12" ><tr><td>
Массив: <br>0 =>Array <br>1 =>4 <br>2 =>php <br><br>Сортированный массив: <br>2 =>Array <br>1 =>4 <br>0 =>php <br></td></tr></table>
<br>

<a name=8></a>
<h1 class=p1>shuffle()</h1>
<p class=text>Перемешивание элементов массива случайным образом.</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
void <b>shuffle</b><em class=gr>(</em>array <b>arr</b><em class=gr>)</em>
</pre></blockquote>
<p class=text>Функция <b>shuffle</b>() перемешивает элементы масиива <b>arr</b> случайным образом.</p>
<br>

<a name=9></a>
<h1 class=p1>natsort()</h1>
<p class=text>Выполняет "естественную" сортировку массива.</p>
<p class=prim><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
void <b>natsort</b><em class=gr>(</em>array <b>arr</b><em class=gr>)</em>
</pre></blockquote>
<p class=text>С такой сортировкой мы уже встречались, когда работали со строками. Поработаем с ней еще разок. Как помните, под естественной сортировкой понимается сортировка таким образом, когда элементы того, что сортируется располагаются в &quot;понятном&quot; для человека порядке.</p>
<p class=prim><b><i>Пример:</i></b></p>
<blockquote><pre>
<em class=red>&lt;?</em>
   <b>$array1</b> <em class=gr>=</em> <b>$array2</b> <em class=gr>=</em> array<em class=gr>(</em>"pict10.gif", "pict2.gif", "pict20.gif", "pict1.gif"<em class=gr>);
   echo (</em>"обычная сортировка:"<em class=gr>); echo (</em>"&lt;<b>br</b>>"<em class=gr>);</em>
   sort<em class=gr>(</em><b>$array1</b><em class=gr>);</em>
   print_r<em class=gr>(</em><b>$array1</b><em class=gr>);
   echo (</em>"&lt;<b>br</b>>"<em class=gr>); echo (</em>"естественная сортировка:"<em class=gr>); echo (</em>"&lt;<b>br</b>>"<em class=gr>);</em>
   natsort<em class=gr>(</em><b>$array2</b><em class=gr>);</em>
   print_r<em class=gr>(</em><b>$array2</b><em class=gr>);</em>
<em class=red>?&gt;</em>
</pre></blockquote>
<p class=prim><b><i>Результат:</i></b></p>
<table class="color1" width="100%" cellpadding="12" ><tr><td>
обычная сортировка:<br>Array
(
    [0] => pict1.gif
    [1] => pict10.gif
    [2] => pict2.gif
    [3] => pict20.gif
)
<br>естественная сортировка:<br>Array
(
    [3] => pict1.gif
    [1] => pict2.gif
    [0] => pict10.gif
    [2] => pict20.gif
)
</td></tr></table>
