<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >array_multisort</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="Manual do PHP" HREF="index.html"><LINK REL="UP" TITLE="Arrays" HREF="ref.array.html"><LINK REL="PREVIOUS" TITLE="array_merge" HREF="function.array-merge.html"><LINK REL="NEXT" TITLE="array_pad" HREF="function.array-pad.html"><META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"></HEAD ><BODY CLASS="refentry" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Manual do PHP</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="function.array-merge.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="function.array-pad.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><H1 ><A NAME="function.array-multisort" ></A >array_multisort</H1 ><DIV CLASS="refnamediv" ><A NAME="AEN11121" ></A ><P > (PHP 4, PHP 5)</P >array_multisort -- Ordena múltiplos arrays ou arrays multi-dimensionais</DIV ><DIV CLASS="refsect1" ><A NAME="AEN11124" ></A ><H2 >Descrição</H2 >bool <B CLASS="methodname" >array_multisort</B > ( array ar1 [, mixed arg [, mixed ... [, array ...]]] )<BR ></BR ><P > Retorna <TT CLASS="constant" ><B >TRUE</B ></TT > em caso de sucesso ou <TT CLASS="constant" ><B >FALSE</B ></TT > em falhas. </P ><P > <B CLASS="function" >array_multisort()</B > pode ser usada para ordenar vários arrays de uma vez, ou um array multi dimensional por uma ou mais dimensões. </P ><P > Chaves associativas (<A HREF="language.types.string.html" ><B CLASS="type" >string</B ></A >) serão mantidas, mas chaves númerica serão reindexadas. </P ><P > Os arrays dados são tratados como colunas de uma tabela a ser classificada pelas linhas - isso lembra a funcionalidade da cláusula ORDER BY da SQL. O primeiro array é o principal na ordenação. As linhas (valores) no primeiro array serve de base para a ordenação do próximo, e assim por diante. </P ><P > A estrutura de argumentos dessa função não é muito normal, mas bastante flexível. O primeiro argumento de todos deve ser um array. Subsequentemente, cada argumento pode ser um array ou um dos sinais de classificação da lista a seguir. </P ><P > Sinais de ordem de classificação: <P ></P ><UL ><LI ><P ><TT CLASS="constant" ><B >SORT_ASC</B ></TT > - classifica na ordem crescente</P ></LI ><LI ><P ><TT CLASS="constant" ><B >SORT_DESC</B ></TT > - classifica na ordem descrescente</P ></LI ></UL > </P ><P > Sinais de tipos de ordenação: <P ></P ><UL ><LI ><P ><TT CLASS="constant" ><B >SORT_REGULAR</B ></TT > - compara os elementos normalmente</P ></LI ><LI ><P ><TT CLASS="constant" ><B >SORT_NUMERIC</B ></TT > - compara os elementos como itens numéricos</P ></LI ><LI ><P ><TT CLASS="constant" ><B >SORT_STRING</B ></TT > - compara os elementos como strings</P ></LI ></UL > </P ><P > Não podem existir dois sinais de ordenação do mesmo tipo especificados para um mesmo array. Os sinais de ordenação especificados depois de um array se aplicam apenas para esse array - a eles são atribuídos por padrão os valores <TT CLASS="constant" ><B >SORT_ASC</B ></TT > e <TT CLASS="constant" ><B >SORT_REGULAR</B ></TT > antes de cada novo argumento do tipo array. </P ><P > Retorna <TT CLASS="constant" ><B >TRUE</B ></TT > em caso de sucesso ou <TT CLASS="constant" ><B >FALSE</B ></TT > em falhas. </P ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN11176" ></A ><P ><B >Exemplo 1. Ordenando múltiplos arrays</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$ar1 </font><font color="#007700">= array(</font><font color="#DD0000">"10"</font><font color="#007700">, </font><font color="#0000BB">100</font><font color="#007700">, </font><font color="#0000BB">100</font><font color="#007700">, </font><font color="#DD0000">"a"</font><font color="#007700">);<br /></font><font color="#0000BB">$ar2 </font><font color="#007700">= array(</font><font color="#0000BB">1</font><font color="#007700">, </font><font color="#0000BB">3</font><font color="#007700">, </font><font color="#DD0000">"2"</font><font color="#007700">, </font><font color="#0000BB">1</font><font color="#007700">);<br /></font><font color="#0000BB">array_multisort</font><font color="#007700">(</font><font color="#0000BB">$ar1</font><font color="#007700">, </font><font color="#0000BB">$ar2</font><font color="#007700">);<br /><br /></font><font color="#0000BB">var_dump</font><font color="#007700">(</font><font color="#0000BB">$ar1</font><font color="#007700">);<br /></font><font color="#0000BB">var_dump</font><font color="#007700">(</font><font color="#0000BB">$ar2</font><font color="#007700">);<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ><P > Nesse exemplo, depois da ordenação, o primeiro array terá "10", "a", 100, 100. O segundo conterá 1, 1, "2", 3. Os elementos do segundo array que correpondem aos do primeiro (100 e 100) também foram ordenados. </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >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) }</PRE ></TD ></TR ></TABLE ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN11182" ></A ><P ><B >Exemplo 2. Ordenando um array multi-dimensional</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$ar </font><font color="#007700">= array(<br /> array(</font><font color="#DD0000">"10"</font><font color="#007700">, </font><font color="#0000BB">11</font><font color="#007700">, </font><font color="#0000BB">100</font><font color="#007700">, </font><font color="#0000BB">100</font><font color="#007700">, </font><font color="#DD0000">"a"</font><font color="#007700">),<br /> array( </font><font color="#0000BB">1</font><font color="#007700">, </font><font color="#0000BB">2</font><font color="#007700">, </font><font color="#DD0000">"2"</font><font color="#007700">, </font><font color="#0000BB">3</font><font color="#007700">, </font><font color="#0000BB">1</font><font color="#007700">)<br />);<br /></font><font color="#0000BB">array_multisort</font><font color="#007700">(</font><font color="#0000BB">$ar</font><font color="#007700">[</font><font color="#0000BB">0</font><font color="#007700">], </font><font color="#0000BB">SORT_ASC</font><font color="#007700">, </font><font color="#0000BB">SORT_STRING</font><font color="#007700">,<br /> </font><font color="#0000BB">$ar</font><font color="#007700">[</font><font color="#0000BB">1</font><font color="#007700">], </font><font color="#0000BB">SORT_NUMERIC</font><font color="#007700">, </font><font color="#0000BB">SORT_DESC</font><font color="#007700">);<br /></font><font color="#0000BB">var_dump</font><font color="#007700">(</font><font color="#0000BB">$ar</font><font color="#007700">);<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P > Neste exemplo, depois de organizar, a primeira array se transformará em 10", 100, 100, 11, "a" (ela for ordenada com as strings em ordem ascendente). A segunda contém 1, 3, "2", 2, 1 (ordenada como números, em ordem descendente). </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >array(2) { [0]=> array(5) { [0]=> string(2) "10" [1]=> int(100) [2]=> int(100) [3]=> int(11) [4]=> string(1) "a" } [1]=> array(5) { [0]=> int(1) [1]=> int(3) [2]=> string(1) "2" [3]=> int(2) [4]=> int(1) } }</PRE ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN11188" ></A ><P ><B >Exemplo 3. ordenando resultados de um banco de dados</B ></P ><P > Para este exemplo, cada elemento na array <CODE CLASS="varname" >data</CODE > representa uma linha na tabela. Este tipo de conjunto de dados é tipico de um registro de banco de dados. </P ><P > Dados do Exemplo: </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >volume | edition -------+-------- 67 | 2 86 | 1 85 | 6 98 | 2 86 | 6 67 | 7</PRE ></TD ></TR ></TABLE ><P > Os dados como um array, chamado <CODE CLASS="varname" >data</CODE >. isto seria normalmente, por exemplo, obtico com um loop em <A HREF="function.mysql-fetch-assoc.html" ><B CLASS="function" >mysql_fetch_assoc()</B ></A >. </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$data</font><font color="#007700">[] = array(</font><font color="#DD0000">'volume' </font><font color="#007700">=> </font><font color="#0000BB">67</font><font color="#007700">, </font><font color="#DD0000">'edition' </font><font color="#007700">=> </font><font color="#0000BB">2</font><font color="#007700">);<br /></font><font color="#0000BB">$data</font><font color="#007700">[] = array(</font><font color="#DD0000">'volume' </font><font color="#007700">=> </font><font color="#0000BB">86</font><font color="#007700">, </font><font color="#DD0000">'edition' </font><font color="#007700">=> </font><font color="#0000BB">1</font><font color="#007700">);<br /></font><font color="#0000BB">$data</font><font color="#007700">[] = array(</font><font color="#DD0000">'volume' </font><font color="#007700">=> </font><font color="#0000BB">85</font><font color="#007700">, </font><font color="#DD0000">'edition' </font><font color="#007700">=> </font><font color="#0000BB">6</font><font color="#007700">);<br /></font><font color="#0000BB">$data</font><font color="#007700">[] = array(</font><font color="#DD0000">'volume' </font><font color="#007700">=> </font><font color="#0000BB">98</font><font color="#007700">, </font><font color="#DD0000">'edition' </font><font color="#007700">=> </font><font color="#0000BB">2</font><font color="#007700">);<br /></font><font color="#0000BB">$data</font><font color="#007700">[] = array(</font><font color="#DD0000">'volume' </font><font color="#007700">=> </font><font color="#0000BB">86</font><font color="#007700">, </font><font color="#DD0000">'edition' </font><font color="#007700">=> </font><font color="#0000BB">6</font><font color="#007700">);<br /></font><font color="#0000BB">$data</font><font color="#007700">[] = array(</font><font color="#DD0000">'volume' </font><font color="#007700">=> </font><font color="#0000BB">67</font><font color="#007700">, </font><font color="#DD0000">'edition' </font><font color="#007700">=> </font><font color="#0000BB">7</font><font color="#007700">);<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P > neste exemplo, nós iremos ordenar por <CODE CLASS="varname" >volume</CODE > descendente, <CODE CLASS="varname" >edition</CODE > ascendente. </P ><P > Nós temos uma matriz de linhas, mas <B CLASS="function" >array_multisort()</B > requer uma matriz de colunas, assim nós usamos o código abaixo para obter colunas, e então realizar o ordenamento. </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">// Obter uma lista de colunas<br /></font><font color="#007700">foreach (</font><font color="#0000BB">$data </font><font color="#007700">as </font><font color="#0000BB">$key </font><font color="#007700">=> </font><font color="#0000BB">$row</font><font color="#007700">) {<br /> </font><font color="#0000BB">$volume</font><font color="#007700">[</font><font color="#0000BB">$key</font><font color="#007700">] = </font><font color="#0000BB">$row</font><font color="#007700">[</font><font color="#DD0000">'volume'</font><font color="#007700">];<br /> </font><font color="#0000BB">$edition</font><font color="#007700">[</font><font color="#0000BB">$key</font><font color="#007700">] = </font><font color="#0000BB">$row</font><font color="#007700">[</font><font color="#DD0000">'edition'</font><font color="#007700">];<br />}<br /><br /> </font><font color="#FF8000">// Ordena os dados com volume descendente, edition ascendente<br /> // adiciona $data como o último parãmetro, para ordenar pela chave comum<br /></font><font color="#0000BB">array_multisort</font><font color="#007700">(</font><font color="#0000BB">$volume</font><font color="#007700">, </font><font color="#0000BB">SORT_DESC</font><font color="#007700">, </font><font color="#0000BB">$edition</font><font color="#007700">, </font><font color="#0000BB">SORT_ASC</font><font color="#007700">, </font><font color="#0000BB">$data</font><font color="#007700">);<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P > O conjunto de dados agora stará ordenado, e agora vai ficar assim: </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >volume | edition -------+-------- 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7</PRE ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ><P > <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN11207" ></A ><P ><B >Exemplo 4. Ordenar sem diferenciar maiúsculas e minúsculas</B ></P ><P > Ambas <TT CLASS="constant" ><B >SORT_STRING</B ></TT > e <TT CLASS="constant" ><B >SORT_REGULAR</B ></TT > diferenciam maiúsculas e minúsculas, strings começando com uma letra maiúscula irão vir antes de uma string começando com uma letra minúscula. </P ><P > Para ordenar sem diferenciar maiúsculas e minúsculas, force a ordem de ordenação para que seja determinada por uma cópia em minúscula da matriz original. </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br />$array </font><font color="#007700">= array(</font><font color="#DD0000">'Alpha'</font><font color="#007700">, </font><font color="#DD0000">'atomic'</font><font color="#007700">, </font><font color="#DD0000">'Beta'</font><font color="#007700">, </font><font color="#DD0000">'bank'</font><font color="#007700">);<br /></font><font color="#0000BB">$array_lowercase </font><font color="#007700">= </font><font color="#0000BB">array_map</font><font color="#007700">(</font><font color="#DD0000">'strtolower'</font><font color="#007700">, </font><font color="#0000BB">$array</font><font color="#007700">);<br /><br /></font><font color="#0000BB">array_multisort</font><font color="#007700">(</font><font color="#0000BB">$array_lowercase</font><font color="#007700">, </font><font color="#0000BB">SORT_ASC</font><font color="#007700">, </font><font color="#0000BB">SORT_STRING</font><font color="#007700">, </font><font color="#0000BB">$array</font><font color="#007700">);<br /></font><font color="#0000BB">print_r</font><font color="#007700">(</font><font color="#0000BB">$array</font><font color="#007700">);<br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ><P >O exemplo acima irá imprimir:</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><PRE CLASS="screen" >Array ( [0] => Alpha [1] => atomic [2] => bank [3] => Beta )</PRE ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="function.array-merge.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Principal</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="function.array-pad.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >array_merge</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="ref.array.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >array_pad</TD ></TR ></TABLE ></DIV ></BODY ></HTML >