note 34619 added to function.asort
| From: | ms at zircular dot dk | Date: | Fri, 01 Aug 2003 12:26:55 +0000 |
| Subject: | note 34619 added to function.asort | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-53136@lists.php.net to get a copy of this message | ||
I also experienced that asort discards any order of keys, which was a big problem for me at one
time, and I did these functions to sort the keys after running asort on the array:
<?php
function ch_array($arr){
$i=0;
foreach($arr as $key=>$value){
if($i==0){
$prev_value = $value;
$prev_key = $key;
$i++;
}else{
if($value == $prev_value && $key < $prev_key){
}else{
$i++;
}
$prev_value = $value;
$prev_key = $key;
}
}
if($i == count($arr)){
return true;
}else{
return false;
}
}
function sort_array($arr){
$tmp = array();
$start = true;
foreach($arr as $key => $value){
if($start){
$prev_key = $key;
$prev_value = $value;
$start = false;
}else{
if($value == $prev_value){
if($key > $prev_key){
$tmp[$prev_key] = $prev_value;
$prev_key = $key;
$prev_value = $value;
}else{
$tmp[$key] = $value;
}
}else{
$tmp[$prev_key] = $prev_value;
$prev_key = $key;
$prev_value = $value;
}
}
}
$tmp[$prev_key] = $prev_value;
return $tmp;
}
$fruits =
array('apple','banana','banana','lemon','apple');
print_r($fruits);
/*result
Array
(
[0] => apple
[1] => banana
[2] => banana
[3] => lemon
[4] => apple
)
*/
asort($fruits);
print_r($fruits);
/*result
Array
(
[4] => apple
[0] => apple
[2] => banana
[1] => banana
[3] => lemon
)
*/
while(!ch_array($fruits)){
$fruits = sort_array($fruits);
}
print_r($fruits);
/*result
Array
(
[0] => apple
[4] => apple
[1] => banana
[2] => banana
[3] => lemon
)
*/
?>
----
Manual Page -- http://www.php.net/manual/en/function.asort.php
Edit Note -- http://master.php.net/manage/user-notes.php?action=edit+34619
Delete Note -- http://master.php.net/manage/user-notes.php?action=delete+34619&report=yes
Reject Note -- http://master.php.net/manage/user-notes.php?action=reject+34619&report=yes