[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка двухмерного массива.
major28
Здравствуйте Знатоки PHP!
Помогите мне отсортировать двумерный массив, только просьба не кидайте ссылки на мануалы, я целую неделю пытался и все перерыл)
У меня есть массив
[php]$mas[]=array(
array("red"=>"yes", "blue"=>"2", "blak"=>"no",);
array("red"=>"yes", "blue"=>"1", "blak"=>"no",);
array("red"=>"yes", "blue"=>"5", "blak"=>"no",);
array("red"=>"yes", "blue"=>"3", "blak"=>"no",);
);

мне нужно отсортировать массив по значению поля blue. тоесть должно получится
array(
array("red"=>"yes", "blue"=>"1", "blak"=>"no",);
array("red"=>"yes", "blue"=>"2", "blak"=>"no",);
array("red"=>"yes", "blue"=>"3", "blak"=>"no",);
array("red"=>"yes", "blue"=>"5", "blak"=>"no",);
)



Спустя 19 минут, 19 секунд (17.11.2010 - 22:39) sergeiss написал(а):
ОК, я не дам ссылку на мануал, как ты просил smile.gif Я просто назову функцию, которая тебе нужна. А в мануале ты сам её найдёшь wink.gif

usort() называется. У неё в качестве 2-го параметра передаётся имя фунции, определенной пользователем. То есть тобой. Вот эта функция и помогает отсортировать.

PS. И кстати. "Черный" по-английски пишется black, а у тебя blak написано. И не черномазый, и не афроамериканец... Не пойми что, вобщем, получается wink.gif

PPS. И тему перенесу в раздел "для начинающих". Потому что "для знатоков" тут не годится smile.gif

Спустя 36 минут, 57 секунд (17.11.2010 - 23:16) major28 написал(а):
sergeiss спасибо, не мог бы ты мне написать что удет в моем случае?) зарание огромное спасибо!_

Спустя 10 минут, 6 секунд (17.11.2010 - 23:26) sergeiss написал(а):
Да без проблем smile.gif

Заходишь по той ссылке, что в моей подписи, затем вверху страницы, в строке поиска, вводишь usort, затем читаешь описалово. Там даже примеры есть! Можешь скачать себе и локальную версию хэлпа. Это еще проще... Всего 3-4 клика мышкой...

Или ты хочешь, чтобы я сюда скопипастил всё? А зачем оно мне надо, скажи, плз!

Спустя 10 минут, 14 секунд (17.11.2010 - 23:36) major28 написал(а):
ну плз)))) просто я неделю тупил и у меня башка совсем не соображает сейчас))))

Спустя 55 минут, 7 секунд (18.11.2010 - 00:32) major28 написал(а):
sergeiss Помоги плиз, просто у этой функции видать есть косяки))
у меня после 1 идет всегда 10 а не 2, а после 2 20 а не 3 и т.д.

function cmp($a, $b)
{
return strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = 1;
$fruits[1]["fruit"] = 4;
$fruits[2]["fruit"] = 3;
$fruits[3]["fruit"] = 0;
$fruits[4]["fruit"] = 0.5;
$fruits[5]["fruit"] = 10;
$fruits[6]["fruit"] = 11;
$fruits[7]["fruit"] = 30;

usort($fruits, "cmp");

while (list($key, $value) = each($fruits)) {
echo "\$fruits[$key]: " . $value["fruit"] . "<br>
"
;
}

Спустя 3 минуты, 39 секунд (18.11.2010 - 00:35) sergeiss написал(а):
Цитата (major28 @ 18.11.2010 - 01:32)
у меня после 1 идет всегда 10 а не 2, а после 2 20 а не 3 и т.д.

И это совершенно логично, потому что ты сравниваешь как строки, а не как числа!!! В функции сравнения убери strcmp и сделай сравнение чисел.

Спустя 2 минуты, 39 секунд (18.11.2010 - 00:38) major28 написал(а):
Круто!) работает!!! Большое ваще огромное спасибо!!!)
Последний вопросик)
Объясни плиз как логически работает эта штука
function cmp($a, $b) 
{
return $a["fruit"]>$b["fruit"];
}


больше сегодня не побеспокою , обещаю!)

Спустя 1 час, 24 минуты, 36 секунд (18.11.2010 - 02:02) kirik написал(а):
Цитата (major28 @ 17.11.2010 - 16:38)
Объясни плиз как логически работает эта штука

Если левая часть больше правой, то возвращает true, если меньше - false.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.