PHP. Сортировка многомерного массива по значениям 2-х ключей @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 5 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
Lezvie Муж.
участник
43
Сообщения: 1661
Зарегистрирован: 20.05.04
Откуда: Москва
Заголовок сообщения: PHP. Сортировка многомерного массива по значениям 2-х ключей
Сообщение Добавлено: 7 Сентябрь 2009, 17:38:47 
Народ!
Помогите, затупил...

Есть массив вида - array( array1['цена']['производитель'], array2['цена']['производитель'], array3['цена']['производитель']).

Нужно отсортировать это дерьмо по ЗНАЧЕНИЯМ 2-х ключей - по 'цена' и 'производитель'…
По значению 1 ключа - не проблем - uasort работает нормально...
А вот по 2-м сразу...

Весь ум наморщил - нихуа не понимаю...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 7 Сентябрь 2009, 18:17:09 
Он и по 2 отлично работает. Начнем с простого: твой код сортировки по одному ключу.
Lezvie Муж.
участник
43
Сообщения: 1661
Зарегистрирован: 20.05.04
Откуда: Москва
Сообщение Добавлено: 8 Сентябрь 2009, 10:32:26 
По цене сортирует отлично - вот код -

function cmp_c($a, $b)
{
return strcmp($a["cena"], $b["cena"]);
}

if($sort == "c")
{
uasort($array_of_tovars, "cmp_c");
reset($array_of_tovars);
}


А вот по двум сразу - …!

Пробовал сделать так -

function cmp_pc($a, $b)
{
$r1 = return strcmp($a["cena"], $b["cena"]);
$r2 = return strcmp($a["proizvoditel"], $b["proizvoditel"]);

return ($r1 & $r2);
}

if($sort == "pc")
{
uasort($array_of_tovars, "cmp_pc");
reset($array_of_tovars);
}

Нихуа...
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 8 Сентябрь 2009, 12:35:28 
Очевидно, код неверный.
Код:
function cmp_pc($a, $b)
{
  $r1 = return strcmp($a["cena"], $b["cena"]);
  $r2 = return strcmp($a["proizvoditel"], $b["proizvoditel"]);
  return ($r1 & $r2);
}


Начнем с того, что получим результат первого сравнения:

Код:
$r1 = strcmp($a["cena"], $b["cena"]);


Очевидно, что если r1>0 или r1<0, то значение r2 вообще для нас несущественно. Соответственно, получаем:

Код:
function cmp_pc($a, $b)
{
  $r1 = strcmp($a["cena"], $b["cena"]);
  return ($r1 == 0) ? strcmp($a["proizvoditel"], $b["proizvoditel"]) : $r1;
}
Lezvie Муж.
участник
43
Сообщения: 1661
Зарегистрирован: 20.05.04
Откуда: Москва
Сообщение Добавлено: 8 Сентябрь 2009, 13:28:13 
Crazy, премного благодарен !

Только в твоем коде по 2-м ключам первое сравнение (у тебя по цене) должно быть по тому критерию,
который существеннее - а именно - производитель, а уж потом по цене :)
Я переставил - и все заработало :)

Спасибо !
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 5 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100