| |
|
|
| | Структура массива
1
-1 Оля
-2 Женя
-3 Даша
2
-1 24
-2 33
-3 28
$goda[2][2] равняеться 33
Надо сортировать массив так что бы года шли сверху - вниз тоесть
33
28
24
Но при этом имена остаються на своих местах, а надо что бы они поменялись местами в том же порядке что и годы. Тоесть если до сортировки у Оли было 24 года, то после у Оли и должно остаца 24 года. а никак ни 33. | |
| |
|
|
| |
|
|
| |
для: Бамси
(28.05.2007 в 00:52)
| | | usort() с соответствующей функцией пользовательского сравнения.
Что-то вроде
function cmp($a, $b) { return $b[2]-$a[2]; }
|
| |
| |
|
|
| |
|
|
| |
для: Trianon
(28.05.2007 в 01:52)
| | | Я что то не могу понять как пользоваться этой функцией | |
| |
|
|
| |
|
|
| |
для: Бамси
(28.05.2007 в 17:55)
| | | пример в описании смотрели?
Что непонятно в примере? | |
| |
|
|
| |
|
|
| |
для: Trianon
(28.05.2007 в 18:11)
| | | Честно говоря ничего не понял, не понял что за переменные a and b в функции cmp и что в них пихаеться, и не очень понял как работает сама функция.
Не могли бы вы мне пример сделать вот на этом вот примере который я давал в первом посте. | |
| |
|
|
| |
|
|
| |
для: Бамси
(28.05.2007 в 18:57)
| | | Это называется не сделать пример на примере, а решить задачу.
Мог бы. Но не хочу. Если Вам лениво одну строку из документа по ссылке переписать, то мне - для Вас - и подавно. | |
| |
|
|
| |
|
|
| |
для: Trianon
(28.05.2007 в 19:03)
| | | Тогда ответье пожалуйста мне на этот вопрос, если вам не лениво.
Что за переменные a and b в функции cmp и что в них пихаеться.
И как реагирует функция сортировки на переданные ей значения, -1, 0, 1 | |
| |
|
|
| |
|
|
| |
для: Бамси
(28.05.2007 в 19:08)
| | | Функция сортировки пихает в cmp (функцию сравнения элементов) разные пары элементов из сортируемого массива.
Функция cmp каждый раз сравнивает два элемента и возвращает ноль, если элементы равны.
Если первый элемент нужно поместить раньше второго, функция cmp должна вернуть число меньше нуля.
Если первый элемент нужно поместить позже второго, функция cmp должна вернуть число больше нуля.
Саму сортировку за Вас уже написали. Вам остается лишь придумать, как сравнить два элемента и как выдать подходящий ответ. | |
| |
|
|
| |
|
|
| |
для: Trianon
(28.05.2007 в 19:16)
| | | Вообщем смысл я понял, но как решить нужную мне задачу я так и не понял.
После обычной сортировки надо как то передать получившийся параметр (1, 0 или -1) в другую функцию которая бы сравнивала уже c заранее известным параметром, и подставляла уже полученный результат из предыдущей функции, вообщем брез полный я не понимаю как это сделать, помогите мне уже елки палки, весь день убил на эту тупую задачу, лучше бы полы в квартире помыл блин.
Вот рисунок представления моих мыслей... бред полный но должно работать, только как сделать я не знаю.
http://b.1asphost.com/Solker/hz.gif | |
| |
|
|
| |
|
|
| |
для: Бамси
(28.05.2007 в 22:38)
| | | Ваша задача решается двумя строками.
function cmp($a, $b) { return $b[2]-$a[2]; }
$goga = usort($goga, 'cmp');
|
Или даже одной.
$goga = usort($goga, create_function('$a, $b','return $b[2]-$a[2];'));
|
Я совершенно не понимаю, что мешало заглянуть в мануал по ссылке, которую я Вам дал.
Примеры там были, причем не один. | |
| |
|
|
| |
|
|
| |
для: Trianon
(28.05.2007 в 23:54)
| | | Я не понимаю смысл этой строчки
$b[2]-$a[2];
А массив он кстати так и не сортирует:
<?php
$array = array('1' => array("Ola","Masha","Vika"), '2' => array("24","54","33"));
echo '<pre>';
print_r($array);
echo '</pre>';
/*Array
(
[1] => Array
(
[0] => Ola
[1] => Masha
[2] => Vika
)
[2] => Array
(
[0] => 24
[1] => 54
[2] => 33
)
)*/
function cmp($a, $b) { return $b[2]-$a[2]; }
usort($array, 'cmp');
echo '<pre>';
print_r($array);
echo '</pre>';
/*Array
(
[0] => Array
(
[0] => 24
[1] => 54
[2] => 33
)
[1] => Array
(
[0] => Ola
[1] => Masha
[2] => Vika
)
)
а должно быть:
/*Array
(
[1] => Array
(
[0] => Ola
[1] => Vika
[2] => Masha
)
[2] => Array
(
[0] => 24
[1] => 33
[2] => 54
)
)*/
|
| |
| |
|
|
| |
|
|
| |
для: Бамси
(28.05.2007 в 00:52)
| | | ЭТО 2МЕНРЫЙ МАССИВ?
Может конечно так и не выйдет,
вобщем из этого массива сделать 2 разных массива!
у тебя получится 2 массива один из них будет содержать имена, а второй возраст.
тогда нужно их соединить в один ассоциативный массив, чтобы ключами были имена, а значениями - возраст. Тогда уже отсортировать, следовательно ключи переместяться вместе со значениями так как нужно!!! Может это и ерунда , но я знаю, если есть варианты нужно пробовать! | |
| |
|
|
| |
|
|
| |
для: ШИМ
(29.05.2007 в 00:36)
| | | Это не совсем то что мне нужно, операции с массивами проводить мне не надо. | |
| |
|
|
| |
|
|
| |
для: Бамси
(29.05.2007 в 08:55)
| | | откуда Вы берете массив? | |
| |
|
|
| |
|
|
| |
для: Бамси
(28.05.2007 в 00:52)
| | | Исходя из формулировки задачи могу предположить, что это Ваша так сказать прихоть, кода который забивает данные в массив, я не видел, но в целях простоты, и для снижения вероятности возникновения коллизий лучше сделать так: | |
| |
|
|
| |
|
|
| |
для: mefestofel
(29.05.2007 в 10:00)
| | | Наверняка, код не его, человек просто описание preg_match_all недочитал до нужной точки. | |
| |
|
|
| |
|
|
| |
для: Trianon
(29.05.2007 в 10:31)
| | | скорее всего так и есть.... | |
| |
|
|
| |
|
|
| |
для: mefestofel
(29.05.2007 в 10:00)
| | | Это тот код на который Вам намекал Trianon, сложного ничего нет, чиатйте справочники:
<?php
$array = array();
$array['TestCase1'] = array('name'=>'Ola','value'=>'24');
$array['TestCase2'] = array('name'=>'Masha','value'=>'54');
$array['TestCase3'] = array('name'=>'Vika','value'=>'33');
function multi_sort($my_array, $akey)
{
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;
}
$array = multi_sort($array, $key = 'value');
print_r($array);
?>
|
| |
| |
|
|
| |
|
|
| |
для: mefestofel
(29.05.2007 в 10:50)
| | | Я на такое не намекал. Оно бы мне в страшном сне не привиделось.
Я просто не понял структуры массива - он вывернут наизнанку.
Если массиву вернуть товарный вид - всё обойдется коротким кодом. | |
| |
|
|
| |
|
|
| |
для: Trianon
(29.05.2007 в 11:34)
| | | Не спорю, пример больше демонстрационный, чтобы показать принцип работы... Если писать очень логичный код, то зачастую многие обитатели этого форума не понимают сути и принципов работы, приходится разжевывать...
Несомненно проще вычесть одно из другого...
Если прийти с таким примером сюда:
http://phpclub.ru/talk/index.php
То скорее всего подвергнут жесткой критике и выгонят из форума навсегда...
:-) | |
| |
|
|
| |
|
|
| |
для: mefestofel
(29.05.2007 в 11:59)
| | | Не понимаю почему некоторые отзываются о PHPclub как о месте, доступном для каких-то избранных. Да, он более популярен, да там скорее могут помочь, но только из-за первого пункта.
Но как бы там ни было, это обычные люди, которые сами могут ошибаться. Могу выложить скриншот SQL Injection на PHPclub'е :) | |
| |
|
|
| |
|
|
| |
для: Unkind
(29.05.2007 в 13:23)
| | | Скиньте, пожалуйста мне на мыло, боюсь до того как я успею его поглядеть на форуме, модератор удалит, а я доберусь только вечером до компьютера! | |
| |
|
|
| |
|
|
| |
для: mefestofel
(29.05.2007 в 13:55)
| | | Ну вообще-то тут ничего ужасного нет, т.к. я в тот же день сообщил о дыре админу PHPclub'а. Удалит - отошлю по почте. | |
| |
|
|
| |
|
|
| |
для: Бамси
(28.05.2007 в 00:52)
| | | Чего то ответа на вопроса я так и не увидел, а только намеки на бездарность и тупость.
Данные я парсю функцией preg_match_all, а он пихает все именно в такой архитектуре, как я писал выше. | |
| |
|
|
| |
|
|
| |
для: Бамси
(29.05.2007 в 18:13)
| | | >Данные я парсю функцией preg_match_all
У функции preg_match_all есть 4-й параметр, в котором можно поставить PREG_SET_ORDER. Массив после этого примет человеческий вид.
На тупость и бездарность я не указываю никогда.
Я действительно предпочитаю подсказывать решение, а не выкладывать его "под ключ", как минимум, если задача представляется мне типовым вопросом, многажды разобранным на этом форуме, и не содержит достаточного индивидуального наполнения.
Можете считать это намеком на лень. Для оценки интеллекта и степени дарования Вам придется искать других экспертов.
PS.
>Чего то ответа на вопроса я так и не увидел...
Я Вам задал вопрос. "Откуда Вы берете массив?".
Я увидел на него ответ? | |
| |
|
|