ID:              37480
 User updated by: 8umucsxy at terra dot es
 Reported By:     8umucsxy at terra dot es
 Status:          Bogus
 Bug Type:        Feature/Change Request
 PHP Version:     4.4.2
 New Comment:

<?php
                require_once("includes/conn.php");

                $sql = "SELECT * FROM apellidos.apellidos ORDER BY apellido";
                $res = mysql_query($sql);
                while($row=mysql_fetch_object($res)){
                        echo $row->apellido . ",";
                } // while

                echo "<br>";

           $students = array("BUÑUEL", "ABADIA", "ÁLVARES", "ZUBIETA",
"ALVAREZ");
           foreach ($students as $key => $row){
         $surname[$key] = $row['surname'];
       }
       array_multisort($surname, SORT_ASC, $students);

                for($i=0;$i<count($students);$i++){
                        echo $students[$i] . ", ";
                } // for


?>


Previous Comments:
------------------------------------------------------------------------

[2006-05-17 21:39:04] 8umucsxy at terra dot es

I include the code at the end of my comment.
Yes, that sorting you provide is possible and indeed more convenient,
but notice that this is just an example. I used array_multisort for a
real-life example where I needed to order by different keys, one
numeric, the other two strings, and I found the problem. Indeed the
only shortcut I was able to get was to temporaly disable the accent
character by including another key with the letter converted to the
un-accented equivalen, i.e. "Á" => "A".

I believe the reason is that array_multisort uses A-Z,...Á..., etc., to
order, so including the charset as a parameter in a next version could
be interesting.

------------------------------------------------------------------------

[2006-05-17 21:30:30] [EMAIL PROTECTED]

How can you have a feature request with reproducable code? And this is
all already very possible:

<?php
setlocale(LC_ALL, 'es_ES');

$words = array( ABADIA, ALVAREZ, BUÑUEL, ZUBIETA, ÁLVARES );

sort( $words, SORT_LOCALE_STRING);
var_dump($words);
?>

outputs:
array(5) {
  [0]=>
  string(6) "ABADIA"
  [1]=>
  string(7) "ÁLVARES"
  [2]=>
  string(7) "ALVAREZ"
  [3]=>
  string(6) "BUÑUEL"
  [4]=>
  string(7) "ZUBIETA"
}


------------------------------------------------------------------------

[2006-05-17 16:57:21] 8umucsxy at terra dot es

Description:
------------
There is a problem with array_multisort in languages other than
English.
For special chars, as A with accent (Á), the sorting does not
correspond to what might expect from a MySQL SELECT with ORDER BY.
 
For example the code attached to the message
  
will sort the array in this way: ABADIA, ALVAREZ, BUÑUEL, ZUBIETA,
ÁLVARES
 
while a MySQL SELECT with ORDER BY nombre ASC will yield
 
ABADIA, ÁLVARES, ALVEREZ, BUÑUEL, ZUBIETA
 
as A and Á are considered two different representations of the same
letter.


Reproduce code:
---------------
 foreach ($students as $key => $row){
          $surname[$key] = $row['surname'];
       }
       array_multisort($surname, SORT_ASC, $students);


Expected result:
----------------
ABADIA, ÁLVARES, ALVEREZ, BUÑUEL, ZUBIETA

Actual result:
--------------
ABADIA, ALVAREZ, BUÑUEL, ZUBIETA, ÁLVARES


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=37480&edit=1

Reply via email to