Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сортировка / 4 сообщений из 4, страница 1 из 1
26.08.2018, 16:20
    #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
27.08.2018, 11:33
    #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
27.08.2018, 14:18
    #39693729
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка
ilshatkin,

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

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



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


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