Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: сортировка многомерного массива с помощью array_multisort
 
 автор: t3ma   (12.01.2010 в 16:36)   письмо автору
 
 

пытаюсь отсортировать массив по 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 
($rateArraySORT_NUMERICSORT_DESC);
?>

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 16:41)   письмо автору
 
   для: 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]);

  Ответить  
 
 автор: t3ma   (12.01.2010 в 16:47)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 16:41)
 

да, $rateArray это то что написано в первом сообщении :)

так не сортирует.. :(

  Ответить  
 
 автор: kosta_in_net   (12.01.2010 в 17:28)   письмо автору
 
   для: t3ma   (12.01.2010 в 16:47)
 

блин!
Чё-то я протупил (отвлекался). Тебе нужно переставить все местами, чтоб получился массив:

$rateArray ['id'][0]...
$rateArray ['ratesum'][0]...
кстати, ты кавычки не проставил...

  Ответить  
 
 автор: t3ma   (12.01.2010 в 17:44)   письмо автору
 
   для: kosta_in_net   (12.01.2010 в 17:28)
 

тоесть переставить ???
на примере покажите если можно

> кстати, ты кавычки не проставил...
это Вы не проставили :)

  Ответить  
 
 автор: root   (12.01.2010 в 18:19)   письмо автору
 
   для: t3ma   (12.01.2010 в 17:44)
 

меня терзают смутные сомнения.. :-)
Откуда у Вас такой массив? Не с БД ли Вы работаете?

Если да, то читаем про кострукцию ORDER BY
Если таки нет, то как-то так:
<?php
foreach( $rateArray as $v )
    
$rate[] = $v['ratesum'];
array_multisort$rateSORT_DESC$rateArray );
print_r$rateArray );

  Ответить  
 
 автор: t3ma   (12.01.2010 в 18:52)   письмо автору
 
   для: 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'); 
?>

  Ответить  
 
 автор: root   (12.01.2010 в 19:10)   письмо автору
 
   для: t3ma   (12.01.2010 в 18:52)
 

>с БД но ORDER BY в моем случае не поможет

why not?

  Ответить  
 
 автор: t3ma   (12.01.2010 в 19:45)   письмо автору
 
   для: root   (12.01.2010 в 19:10)
 

долго объяснять. в двух словах запрос выполняется в цикле

  Ответить  
 
 автор: root   (12.01.2010 в 19:59)   письмо автору
 
   для: t3ma   (12.01.2010 в 19:45)
 

> ... запрос выполняется в цикле

mamma mia!!

  Ответить  
 
 автор: kosta_in_net   (13.01.2010 в 01:54)   письмо автору
 
   для: 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 )
)
Мой случай работает быстрее и требует меньше кода.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования