powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сортировка
4 сообщений из 4, страница 1 из 1
Сортировка
    #39693425
ilshatkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, пожалуйста,

можно ли как нибудь список сортировать по одному текстовому полю, то есть собрать в списке участки с одинаковым текстовым полем.

namesizepriceботинки 44 1400ботинки 43 1300ботинки 42 1000кроссовки40 800кроссовки 41 1200кроссовки 43 1800тапочки 42 500тапочки 45 900

а потом еще раз сортировать по другому числовому полю среди этих списков.

То есть структура списка в виде однородных списков должна сохранится, но просортироваться, например по минимальной цене, как в примере ниже

namesizepriceтапочки 42 500тапочки 45 900кроссовки40 800кроссовки 41 1200кроссовки 43 1800ботинки 42 1000ботинки 43 1300ботинки 44 1400
...
Рейтинг: 0 / 0
Сортировка
    #39693591
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilshatkin,

если данные из sql , то поставить в запросе order by name,size
если просто массив, то можно отсортировать методом пузырька сначала одно поле, потом другое

у меня получилось так
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
<?php

function msort_asc(&$m,$l,$key) {
 for($i=0;$i<($l-1);$i++)
  for($j=($l-1);$j>$i;$j--)
   if ( $m[$j][$key] < $m[$j-1][$key] ) {
    $b=$m[$j];
    $m[$j]=$m[$j-1];
    $m[$j-1]=$b;
   }
}

function msort_desc(&$m,$l,$key) {
 for($i=0;$i<($l-1);$i++)
  for($j=($l-1);$j>$i;$j--)
   if ( $m[$j][$key] > $m[$j-1][$key] ) {
    $b=$m[$j];
    $m[$j]=$m[$j-1];
    $m[$j-1]=$b;
   }
}

function prn_m($m,$l) {
 for($i=0;$i<$l;$i++)
  printf("%10s\t%d\t%4d\n",$m[$i]["name"],$m[$i]["size"],$m[$i]["price"]);
}

$a = array(
 array("name"=>"ботинки","size"=>44,"price"=>1400),
 array("name"=>"ботинки","size"=>43,"price"=>1300),
 array("name"=>"ботинки","size"=>42,"price"=>1000),
 array("name"=>"кроссовки","size"=>40,"price"=>800),
 array("name"=>"кроссовки","size"=>41,"price"=>1200),
 array("name"=>"кроссовки","size"=>43,"price"=>1800),
 array("name"=>"тапочки","size"=>42,"price"=>500),
 array("name"=>"тапочки","size"=>45,"price"=>900)
);

$l=count($a);
prn_m($a,$l);
msort_asc($a,$l,"size");
msort_desc($a,$l,"name");
echo "\n";
prn_m($a,$l);

?>



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
   ботинки      44      1400
   ботинки      43      1300
   ботинки      42      1000
 кроссовки      40       800
 кроссовки      41      1200
 кроссовки      43      1800
   тапочки      42       500
   тапочки      45       900

   тапочки      42       500
   тапочки      45       900
 кроссовки      40       800
 кроссовки      41      1200
 кроссовки      43      1800
   ботинки      42      1000
   ботинки      43      1300
   ботинки      44      1400

...
Рейтинг: 0 / 0
Сортировка
    #39693729
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilshatkin,

Специально для таких придумали функцию array_multisort()
...
Рейтинг: 0 / 0
Сортировка
    #39693852
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikkiMouse,

Код: php
1.
array_multisort (array_column($a, 'name'), SORT_DESC,array_column($a,'size'), SORT_ASC, $a);



так ?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сортировка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]