aidan Sun Oct 3 07:06:40 2004 EDT
Modified files:
/phpdoc/en/reference/array/functions array-multisort.xml
Log:
Intergrated the user notes into examples
http://cvs.php.net/diff.php/phpdoc/en/reference/array/functions/array-multisort.xml?r1=1.11&r2=1.12&ty=u
Index: phpdoc/en/reference/array/functions/array-multisort.xml
diff -u phpdoc/en/reference/array/functions/array-multisort.xml:1.11
phpdoc/en/reference/array/functions/array-multisort.xml:1.12
--- phpdoc/en/reference/array/functions/array-multisort.xml:1.11 Tue Aug 3
06:24:05 2004
+++ phpdoc/en/reference/array/functions/array-multisort.xml Sun Oct 3 07:06:39
2004
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Revision: 1.11 $ -->
+<!-- $Revision: 1.12 $ -->
<!-- splitted from ./en/functions/array.xml, last change in rev 1.11 -->
<refentry id="function.array-multisort">
<refnamediv>
@@ -8,17 +8,20 @@
</refnamediv>
<refsect1>
<title>Description</title>
- <methodsynopsis>
- <type>bool</type><methodname>array_multisort</methodname>
- <methodparam><type>array</type><parameter>ar1</parameter></methodparam>
- <methodparam
choice="opt"><type>mixed</type><parameter>arg</parameter></methodparam>
- <methodparam
choice="opt"><type>mixed</type><parameter>...</parameter></methodparam>
- <methodparam
choice="opt"><type>array</type><parameter>...</parameter></methodparam>
- <!-- Parameters don't need to be passed by reference -->
- </methodsynopsis>
+ <methodsynopsis>
+ <type>bool</type><methodname>array_multisort</methodname>
+ <methodparam><type>array</type><parameter>ar1</parameter></methodparam>
+ <methodparam
choice="opt"><type>mixed</type><parameter>arg</parameter></methodparam>
+ <methodparam
choice="opt"><type>mixed</type><parameter>...</parameter></methodparam>
+ <methodparam
choice="opt"><type>array</type><parameter>...</parameter></methodparam>
+ <!-- Parameters don't need to be passed by reference -->
+ </methodsynopsis>
+ <para>
+ &return.success;
+ </para>
<para>
<function>array_multisort</function> can be used to sort several
- arrays at once or a multi-dimensional array according by one of
+ arrays at once or a multi-dimensional array according to one of
more dimensions. Associative (string) keys are maintained while
numerical keys are re-indexed.
</para>
@@ -31,18 +34,18 @@
</para>
<para>
The argument structure of this function is a bit unusual, but
- flexible. The very first argument has to be an
- array. Subsequently, each argument can be either an array or a
- sorting flag from the following lists.
+ flexible. The first argument has to be an array. Subsequently,
+ each argument can be either an array or a sorting flag from the
+ following lists.
</para>
<para>
Sorting order flags:
<itemizedlist>
<listitem>
- <simpara><constant>SORT_ASC</constant> - sort in ascending order</simpara>
+ <simpara><constant>SORT_ASC</constant> - Sort in ascending order</simpara>
</listitem>
<listitem>
- <simpara><constant>SORT_DESC</constant> - sort in descending order</simpara>
+ <simpara><constant>SORT_DESC</constant> - Sort in descending order</simpara>
</listitem>
</itemizedlist>
</para>
@@ -50,13 +53,13 @@
Sorting type flags:
<itemizedlist>
<listitem>
- <simpara><constant>SORT_REGULAR</constant> - compare items normally</simpara>
+ <simpara><constant>SORT_REGULAR</constant> - Compare items normally</simpara>
</listitem>
<listitem>
- <simpara><constant>SORT_NUMERIC</constant> - compare items
numerically</simpara>
+ <simpara><constant>SORT_NUMERIC</constant> - Compare items
numerically</simpara>
</listitem>
<listitem>
- <simpara><constant>SORT_STRING</constant> - compare items as strings</simpara>
+ <simpara><constant>SORT_STRING</constant> - Compare items as strings</simpara>
</listitem>
</itemizedlist>
</para>
@@ -66,9 +69,7 @@
only to that array - they are reset to default <constant>SORT_ASC</constant> and
<constant>SORT_REGULAR</constant> before each new array argument.
</para>
- <para>
- &return.success;
- </para>
+
<para>
<example>
<title>Sorting multiple arrays</title>
@@ -78,17 +79,37 @@
$ar1 = array("10", 100, 100, "a");
$ar2 = array(1, 3, "2", 1);
array_multisort($ar1, $ar2);
+
+var_dump($ar1);
+var_dump($ar2);
?>
]]>
</programlisting>
+ <para>
+ In this example, after sorting, the first array will contain "10",
+ "a", 100, 100. The second array will contain 1, 1, "2", 3. The
+ entries in the second array corresponding to the identical
+ entries in the first array (100 and 100) were sorted as well.
+ </para>
+ <screen>
+<![CDATA[
+array(4) {
+ [0]=> string(2) "10"
+ [1]=> string(1) "a"
+ [2]=> int(100)
+ [3]=> int(100)
+}
+array(4) {
+ [0]=> int(1)
+ [1]=> int(1)
+ [2]=> string(1) "2"
+ [3]=> int(3)
+}
+]]>
+ </screen>
</example>
</para>
- <para>
- In this example, after sorting, the first array will contain 10,
- "a", 100, 100. The second array will contain 1, 1, "2", 3. The
- entries in the second array corresponding to the identical
- entries in the first array (100 and 100) were sorted as well.
- </para>
+
<para>
<example>
<title>Sorting multi-dimensional array</title>
@@ -101,14 +122,151 @@
?>
]]>
</programlisting>
+ <para>
+ In this example, after sorting, the first array will contain "10",
+ 100, 100, "a" (it was sorted as strings in ascending order). The
+ second will contain 1, 3, "2", 1 (sorted as numbers, in
+ descending order).
+ </para>
+ <screen>
+<![CDATA[
+array(2) {
+ [0]=> array(4) {
+ [0]=> string(2) "10"
+ [1]=> int(100)
+ [2]=> int(100)
+ [3]=> string(1) "a"
+ }
+ [1]=> array(4) {
+ [0]=> int(1)
+ [1]=> int(3)
+ [2]=> string(1) "2"
+ [3]=> int(1)
+ }
+}
+]]>
+ </screen>
</example>
</para>
+
<para>
- In this example, after sorting, the first array will contain 10,
- 100, 100, "a" (it was sorted as strings in ascending order), and
- the second one will contain 1, 3, "2", 1 (sorted as numbers, in
- descending order).
+ <example>
+ <title>Sorting database results</title>
+ <para>
+ For this example, each element in the <varname>data</varname>
+ array represents one row in a table. This type of dataset is typical
+ of database records.
+ </para>
+ <para>
+ Example data:
+ </para>
+ <screen>
+<![CDATA[
+volume | edition
+-------+--------
+ 67 | 2
+ 86 | 1
+ 85 | 6
+ 98 | 2
+ 86 | 6
+ 67 | 7
+]]>
+ </screen>
+ <para>
+ The data as an array, called <varname>data</varname>. This would usually,
+ for example, be obtained by looping with
<function>mysql_fetch_assoc</function>.
+ </para>
+ <programlisting role="php">
+<![CDATA[
+<?php
+$data[] = array('volume' => 67, 'edition' => 2);
+$data[] = array('volume' => 86, 'edition' => 1);
+$data[] = array('volume' => 85, 'edition' => 6);
+$data[] = array('volume' => 98, 'edition' => 2);
+$data[] = array('volume' => 86, 'edition' => 6);
+$data[] = array('volume' => 67, 'edition' => 7);
+?>
+]]>
+ </programlisting>
+ <para>
+ In this example, we will order by <varname>volume</varname> descending,
+ <varname>edition</varname> ascending.
+ </para>
+ <para>
+ We have an array of rows, but <function>array_multisort</function>
+ requires an array of columns, so we use the the below code to obtain the
+ columns, then perform the sorting.
+ </para>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// Obtain a list of columns
+foreach ($data as $key => $row) {
+ $volume[$key] = $row['volume'];
+ $edition[$key] = $row['edition'];
+}
+
+// Sort the data with volume descending, edition ascending
+// Add $data as the last parameter, to sort by the common key
+array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
+?>
+]]>
+ </programlisting>
+ <para>
+ The dataset is now sorted, and will look like this:
+ </para>
+ <screen>
+<![CDATA[
+volume | edition
+-------+--------
+ 98 | 2
+ 86 | 1
+ 86 | 6
+ 85 | 6
+ 67 | 2
+ 67 | 7
+]]>
+ </screen>
+ </example>
+ </para>
+
+ <para>
+ <example>
+ <title>Case insensitive sorting</title>
+ <para>
+ Both <constant>SORT_STRING</constant> and
+ <constant>SORT_REGULAR</constant> are case sensitive, strings
+ starting with a capital letter will come before strings starting
+ with a lowercase letter.
+ </para>
+ <para>
+ To perform a case insensitve search, we can sort by an all lowercase array.
+ </para>
+ <programlisting role="php">
+<![CDATA[
+$array = array('Alpha', 'atomic', 'Beta', 'bank');
+$array_lowercase = array_map('strtolower', $array);
+
+array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array, SORT_ASC,
SORT_STRING);
+
+print_r($array);
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+Array
+(
+ [0] => Alpha
+ [1] => atomic
+ [2] => bank
+ [3] => Beta
+)
+]]>
+ </screen>
+ </example>
</para>
+
</refsect1>
</refentry>