|
|
|
| пытаюсь отсортировать массив по ratesum в порядке убывания но ничего не получается
исходный массив:
Array (
[0] => Array ( [id] => 59 [ratesum] => 27 )
[1] => Array ( [id] => 57 [ratesum] => 14 )
[2] => Array ( [id] => 47 [ratesum] => 7 )
[3] => Array ( [id] => 68 [ratesum] => 52 )
)
|
пробовал так :)
<?php
array_multisort ($rateArray, SORT_NUMERIC, SORT_DESC);
?>
|
| |
|
|
|
|
|
|
|
для: t3ma
(12.01.2010 в 16:36)
| | кто такой $rateArray ? Мы его знаем?
если
$rateArray =Array (
[0] => Array ( [id] => 59 [ratesum] => 27 )
[1] => Array ( [id] => 57 [ratesum] => 14 )
[2] => Array ( [id] => 47 [ratesum] => 7 )
[3] => Array ( [id] => 68 [ratesum] => 52 )
);
(хотя лучше бы сразу писать по-человечески), то:
array_multisort ($rateArray[ratesum], SORT_NUMERIC, SORT_DESC,$rateArray[id]); | |
|
|
|
|
|
|
|
для: kosta_in_net
(12.01.2010 в 16:41)
| | да, $rateArray это то что написано в первом сообщении :)
так не сортирует.. :( | |
|
|
|
|
|
|
|
для: t3ma
(12.01.2010 в 16:47)
| | блин!
Чё-то я протупил (отвлекался). Тебе нужно переставить все местами, чтоб получился массив:
$rateArray ['id'][0]...
$rateArray ['ratesum'][0]...
кстати, ты кавычки не проставил... | |
|
|
|
|
|
|
|
для: kosta_in_net
(12.01.2010 в 17:28)
| | тоесть переставить ???
на примере покажите если можно
> кстати, ты кавычки не проставил...
это Вы не проставили :) | |
|
|
|
|
|
|
|
для: t3ma
(12.01.2010 в 17:44)
| | меня терзают смутные сомнения.. :-)
Откуда у Вас такой массив? Не с БД ли Вы работаете?
Если да, то читаем про кострукцию ORDER BY
Если таки нет, то как-то так:
<?php
foreach( $rateArray as $v )
$rate[] = $v['ratesum'];
array_multisort( $rate, SORT_DESC, $rateArray );
print_r( $rateArray );
|
| |
|
|
|
|
|
|
|
для: root
(12.01.2010 в 18:19)
| | с БД но ORDER BY в моем случае не поможет
нашел на форуме по поиску функцию сортировки по значению с чем она отлично справляется :)
<?php
function multi_sort($my_array, $key)
{
function compare($a, $b)
{
global $key;
if ($a[$key]>$b[$key]){
$var = "-1";
return $var;
}
elseif ($a[$key]<$b[$key]){
$var = "1";
return $var;
}
elseif ($a[$key]==$b[$key]){
$var = "0";
return $var;
}
}
usort($my_array, "compare");
return $my_array;
}
$rateArray = multi_sort($rateArray, $key = 'ratesum');
?>
|
| |
|
|
|
|
|
|
|
для: t3ma
(12.01.2010 в 18:52)
| | >с БД но ORDER BY в моем случае не поможет
why not? | |
|
|
|
|
|
|
|
для: root
(12.01.2010 в 19:10)
| | долго объяснять. в двух словах запрос выполняется в цикле | |
|
|
|
|
|
|
|
для: t3ma
(12.01.2010 в 19:45)
| | > ... запрос выполняется в цикле
mamma mia!! | |
|
|
|
|
|
|
|
для: t3ma
(12.01.2010 в 18:52)
| | нужно было изначально заполнять как:
$rateArray['ratesum'][]=...
а у тебя, наверняка, было так:
$rateArray[]['ratesum']=...
Но можно и опосля перевернуть:
for($i=0;$i<sizeof($rateArray);$i++){
$NEWrateArray['ratesum'][]=$rateArray[$i]['ratesum'];
$NEWrateArray['id'][]=$rateArray[$i]['id'];
}
Но если данные берутся из базы, думаю, можно было еще на стадии их получения получить их в нужном порядке
в твоем случае массив получается таким:
Array (
[0] => Array ( [id] => 68 [ratesum] => 52 )
[1] => Array ( [id] => 59 [ratesum] => 27 )
[2] => Array ( [id] => 57 [ratesum] => 14 )
[3] => Array ( [id] => 47 [ratesum] => 7 )
)
В моем таким:
Array (
[ratesum] => Array ( [0] => 52 [1] => 27 [2] => 14 [3] => 7 )
[id] => Array ( [0] => 68 [1] => 59 [2] => 57 [3] => 47 )
)
Мой случай работает быстрее и требует меньше кода. | |
|
|
|