<?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> <refentry xml:id="function.natsort" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> <refnamediv> <refname>natsort</refname> <refpurpose>Sort an array using a "natural order" algorithm</refpurpose> </refnamediv> <refsect1 role="description"> &reftitle.description; <methodsynopsis> <type>bool</type><methodname>natsort</methodname> <methodparam><type>array</type><parameter role="reference">array</parameter></methodparam> </methodsynopsis> <para> This function implements a sort algorithm that orders alphanumeric strings in the way a human being would while maintaining key/value associations. This is described as a "natural ordering". An example of the difference between this algorithm and the regular computer string sorting algorithms (used in <function>sort</function>) can be seen in the example below. </para> </refsect1> <refsect1 role="parameters"> &reftitle.parameters; <para> <variablelist> <varlistentry> <term><parameter>array</parameter></term> <listitem> <para> The input array. </para> </listitem> </varlistentry> </variablelist> </para> </refsect1> <refsect1 role="returnvalues"> &reftitle.returnvalues; <para> &return.success; </para> </refsect1> <refsect1 role="changelog"> &reftitle.changelog; <informaltable> <tgroup cols="2"> <thead> <row> <entry>&Version;</entry> <entry>&Description;</entry> </row> </thead> <tbody> <row> <entry>5.2.10</entry> <entry> Zero padded numeric strings (e.g., '00005') now essentially ignore the 0 padding. </entry> </row> </tbody> </tgroup> </informaltable> </refsect1> <refsect1 role="examples"> &reftitle.examples; <para> <example> <title><function>natsort</function> examples demonstrating basic usage</title> <programlisting role="php"> <![CDATA[ <?php $array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png"); asort($array1); echo "Standard sorting\n"; print_r($array1); natsort($array2); echo "\nNatural order sorting\n"; print_r($array2); ?> ]]> </programlisting> &example.outputs; <screen> <![CDATA[ Standard sorting Array ( [3] => img1.png [1] => img10.png [0] => img12.png [2] => img2.png ) Natural order sorting Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png ) ]]> </screen> <para> For more information see: Martin Pool's <link xlink:href="&url.strnatcmp;">Natural Order String Comparison</link> page. </para> </example> <example> <title><function>natsort</function> examples demonstrating potential gotchas</title> <programlisting role="php"> <![CDATA[ <?php echo "Negative numbers\n"; $negative = array('-5','3','-2','0','-1000','9','1'); print_r($negative); natsort($negative); print_r($negative); echo "Zero padding\n"; $zeros = array('09', '8', '10', '009', '011', '0'); print_r($zeros); natsort($zeros); print_r($zeros); echo "Other characters interfering\n"; $images_oops = array('image_1.jpg','image_12.jpg', 'image_21.jpg', 'image_4.jpg'); print_r($images_oops); natsort($images_oops); print_r($images_oops); echo "Sort by keys\n"; $smoothie = array('orange' => 1, 'apple' => 1, 'yogurt' => 4, 'banana' => 4); print_r($smoothie); uksort( $smoothie, 'strnatcmp'); print_r($smoothie); ?> ]]> </programlisting> &example.outputs; <screen> <![CDATA[ Negative numbers Array ( [0] => -5 [1] => 3 [2] => -2 [3] => 0 [4] => -1000 [5] => 9 [6] => 1 ) Array ( [2] => -2 [0] => -5 [4] => -1000 [3] => 0 [6] => 1 [1] => 3 [5] => 9 ) Zero padding Array ( [0] => 09 [1] => 8 [2] => 10 [3] => 009 [4] => 011 [5] => 0 ) Array ( [5] => 0 [1] => 8 [3] => 009 [0] => 09 [2] => 10 [4] => 011 ) Other characters interfering Array ( [0] => image_1.jpg [1] => image_12.jpg [2] => image_21.jpg [3] => image_4.jpg ) Array ( [0] => image_1.jpg [3] => image_4.jpg [1] => image_12.jpg [2] => image_21.jpg ) Sort by keys Array ( [orange] => 1 [apple] => 1 [yogurt] => 4 [banana] => 4 ) Array ( [apple] => 1 [banana] => 4 [orange] => 1 [yogurt] => 4 ) ]]> </screen> </example> </para> </refsect1> <refsect1 role="seealso"> &reftitle.seealso; <para> <simplelist> <member><function>natcasesort</function></member> <member>&seealso.array.sorting;</member> <member><function>strnatcmp</function></member> <member><function>strnatcasecmp</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 -->