Сортировка элементов массива

Старый mweb

Модератор: [mweb team]

Сортировка элементов массива

Сообщение Padonak Сб май 10, 2008 11:15

Возможно вопрос тупой но не получается сортировка. интересно то что она происходит но результат не тот какой хочется получить. итак есть массив вида:

Код: Выделить всё
var picArray = new Array(
{ttl:"red_pepper", pic:"red_pepper_04.jpg"},
{ttl:"zolushka", pic:"zolushka_1.jpg"},
{ttl:"zolushka", pic:"zolushka_6.jpg"},
{ttl:"dimiz", pic:"dimiz_01.jpg"},
{ttl:"dimiz", pic:"dimiz_02.jpg"},
{ttl:"dimiz", pic:"dimiz_03.jpg"},
{ttl:"muromec", pic:"muromec_06.jpg"},
{ttl:"zolushka", pic:"zolushka_5.jpg"},
{ttl:"zolushka", pic:"zolushka_2.jpg"},
{ttl:"zolushka", pic:"zolushka_3.jpg"},
{ttl:"kabelina", pic:"kabelina_03.jpg"},
{ttl:"zolushka", pic:"zolushka_4.jpg"},
{ttl:"zolushka", pic:"zolushka_7.jpg"},
{ttl:"red_pepper", pic:"red_pepper_01.jpg"},
{ttl:"red_pepper", pic:"red_pepper_02.jpg"},
{ttl:"zolushka", pic:"zolushka_8.jpg"},
{ttl:"zolushka", pic:"zolushka_9.jpg"},
{ttl:"fealko", pic:"fealko_01.jpg"},
{ttl:"panzir", pic:"panzir_05.jpg"},
{ttl:"panzir", pic:"panzir_04.jpg"},
{ttl:"panzir", pic:"panzir_02.jpg"},
{ttl:"panzir", pic:"panzir_01.jpg"},
{ttl:"muromec", pic:"muromec_05.jpg"},
{ttl:"fealko", pic:"fealko_02.jpg"},
//... и т.д.
{pic:"", ttl:""}
);


он содержит ники пользователей и src их фоток. как можно видеть ники могут повторяться но src все разные.
следующей функцией я надеюсь выстроить список-меню ссылок на эти фотки предварительно пересортировав массив так чтобы ники шли в алфавитном поряке а src каждой фотки прописанное в онклик ссылок с одинаковыми никами - в порядке возрастания.

Код: Выделить всё
function buildList(){
// обрезается последний элемент массива т.к. он пустой и
// используется только как средство борьбы с последней
// ненужной запятой - короче то не имеет отношения к вопросу
picArray.pop();


// теперь вродекаг должна быть сортировка
// которая не происходит нужным образом
picArray.sort();


// дальше - построение списка ссылок
// которое видимо не имеет отношения к вопросу тоже
var menu = document.getElementById("menu");
for(var i = 0; i < picArray.length; i++){
var pic = picArray[i]["pic"];
var ttl = picArray[i]["ttl"];
var lnk = document.createElement("a");
lnk.setAttribute("href","#null");
lnk.innerHTML = ttl;
lnk.onfocus = function(){this.blur();};
eval("lnk.onclick = function(){showPic('" + pic + "');}");
menu.appendChild(lnk);
var br = document.createElement("br");
menu.appendChild(br);

}
if(menu.offsetHeight > parseInt(document.body.clientHeight*0.8)){
menu.style.height = parseInt(document.body.clientHeight*0.8) + "px";
menu.style.overflow = "auto";
}
menu.style.top = parseInt(document.body.clientHeight/2 - menu.offsetHeight*0.5) + "px";
}


вопрос: как правильно пересортировать массив?
Последний раз редактировалось Padonak Сб май 10, 2008 12:49, всего редактировалось 1 раз.
Uncaught TypeError: Изображение

Изображение
Аватара пользователя
Padonak
Философ-разговорник
 
Сообщения: 3872
Зарегистрирован: Вт дек 13, 2005 3:23
Откуда: Ростов-на-Дону

Сообщение Muerto Сб май 10, 2008 12:12

Рекурсивно обежать уже отсортированный по никам массив. Но это будет небыстрая функция. Написать?
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Сообщение Padonak Сб май 10, 2008 12:47

2Muerto: напиши конечно попробую чо будет
Uncaught TypeError: Изображение

Изображение
Аватара пользователя
Padonak
Философ-разговорник
 
Сообщения: 3872
Зарегистрирован: Вт дек 13, 2005 3:23
Откуда: Ростов-на-Дону

Сообщение Muerto Сб май 10, 2008 13:04

А можно в два массива разнести. Использовать sort() на оба. А потом их объеденить.
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Сообщение Padonak Сб май 10, 2008 13:05

а совпадет потом?
Uncaught TypeError: Изображение

Изображение
Аватара пользователя
Padonak
Философ-разговорник
 
Сообщения: 3872
Зарегистрирован: Вт дек 13, 2005 3:23
Откуда: Ростов-на-Дону

Сообщение Padonak Сб май 10, 2008 13:06

в справочнике я читал что в sort() мжно как аргумент передавать функцию для определенной сортировки... но что в ней написать в той ф-ции?
Uncaught TypeError: Изображение

Изображение
Аватара пользователя
Padonak
Философ-разговорник
 
Сообщения: 3872
Зарегистрирован: Вт дек 13, 2005 3:23
Откуда: Ростов-на-Дону

Сообщение Muerto Сб май 10, 2008 19:30

2Padonak: Протрезвею - посмотрю...
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Сообщение Padonak Сб май 10, 2008 19:57

2Muerto: да када ж я уже пакончу с тваим пагубным пристрастием к спиртному -12-
Uncaught TypeError: Изображение

Изображение
Аватара пользователя
Padonak
Философ-разговорник
 
Сообщения: 3872
Зарегистрирован: Вт дек 13, 2005 3:23
Откуда: Ростов-на-Дону

Сообщение Padonak Вс май 11, 2008 19:45

Итак пешу аччот

возможно тем кто хорошо владеет пхп это все не будет очень интересно но для таких имбицилов как я - инфа довольно полезная.

у меня изначально было подозрение что подобную сортировку лучше всего делать срецтвами пхп потому что там куча ф-ций для этого предназначенных. этот javascript-массив который я тут приводил в самом начале формируется в башке документа при помощи пхп путем считывания файлов из заданной директории с учетом их расширения. когда мои надежды на легкую сортировку срецтваме javascript не оправдались я задумался о том как же получить уже отсортированный в нужном виде массив javascript. не буду излагать мучительно тупую цепь моих рассуждений. скажу лишь что после того как я привлек к этой тупой проблеме двух таких ушлых камрадов как Скай и Алкипер решение было найдено в течение одной минуты. теперь привожу код для тех кому такое может пригодица:

Код: Выделить всё
<?php
echo'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Тайтл</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="imagetoolbar" content="no">
<link rel="StyleSheet" type="text/css" href="css/style.css">';
// это регвыражение предназначено для того чтобы
// отсекать часть названия файла с цифрами и нижним подчеркиванием
// с целью оставить только слово
$pattern = "/[_]*[\d]/";
// начинаем считывать файлы из директории "pixx"
// пропуская все файлы которые не имеют расширения "jpg"
$dir = opendir("pixx");
while(($file = readdir($dir)) !== false){
if(substr("$file", -3) != "jpg"){continue;}
else{
$temp_ttl = substr("$file", 0, -4);
$ttl = preg_replace($pattern, "", $temp_ttl);
// заносим в массив $arrContent все что нам нужно(часть слова без цифр, src картинки, то что потом станет всплывающей подсказкой)
$arrContent[]= "\n{ttl:\"$ttl\", pic:\"$file\", tip:\" смотреть $temp_ttl \"},";
}
}
closedir($dir);
// теперь нам надо прописать в голову документа javascript-массив
// состоящий из отсортированных натуральным образом членов пхп-массива $arrContent
echo'<script language="JavaScript" type="text/javascript">
<!--
var picArray = new Array(';

// natsort сортирует члены массива таким образом как их мог бы
// отсортировать человек
natsort($arrContent);
// теперь тупо печатаем члены отсортированного натуральным образом пхп-массива
foreach($arrContent as $val) echo $val;

echo'
// дописываем последний член javascript-массива который нужен только для того
// чтобы после него не было запятой которая у нас имеется во всех предыдущих
// позже этот последний ненужный член javascript-массива легко
// убрать использовав pop()
{pic:"", ttl:"", tip:""}
);

var howmuchPix = '.count($arrContent).';
//-->
</script>
<script language="JavaScript" type="text/javascript" src="js/newscript.js"></script>
</head>
<body onload="buildList()">';
?>


в результате всех этих замысловатых мастурбаций вместо javascript-массива приведенного в моем самом первом посте получился вот такой массив:

Код: Выделить всё
<!--
var picArray = new Array(
{ttl:"anhele", pic:"anhele_01.jpg", tip:" сматреть anhele_01 "},
{ttl:"anhele", pic:"anhele_02.jpg", tip:" сматреть anhele_02 "},
{ttl:"anhele", pic:"anhele_03.jpg", tip:" сматреть anhele_03 "},
{ttl:"dimiz", pic:"dimiz_01.jpg", tip:" сматреть dimiz_01 "},
{ttl:"dimiz", pic:"dimiz_02.jpg", tip:" сматреть dimiz_02 "},
{ttl:"dimiz", pic:"dimiz_03.jpg", tip:" сматреть dimiz_03 "},
{ttl:"el_paskudo", pic:"el_paskudo_01.jpg", tip:" сматреть el_paskudo_01 "},
{ttl:"el_paskudo", pic:"el_paskudo_02.jpg", tip:" сматреть el_paskudo_02 "},
{ttl:"el_paskudo", pic:"el_paskudo_03.jpg", tip:" сматреть el_paskudo_03 "},
{ttl:"el_paskudo", pic:"el_paskudo_04.jpg", tip:" сматреть el_paskudo_04 "},
{ttl:"fealko", pic:"fealko_01.jpg", tip:" сматреть fealko_01 "},
{ttl:"fealko", pic:"fealko_02.jpg", tip:" сматреть fealko_02 "},
{ttl:"fealko", pic:"fealko_03.jpg", tip:" сматреть fealko_03 "},
{ttl:"fealko", pic:"fealko_04.jpg", tip:" сматреть fealko_04 "},
{ttl:"fealko", pic:"fealko_05.jpg", tip:" сматреть fealko_05 "},
{ttl:"fealko", pic:"fealko_06.jpg", tip:" сматреть fealko_06 "},
{ttl:"fealko", pic:"fealko_07.jpg", tip:" сматреть fealko_07 "},
{ttl:"fealko", pic:"fealko_08.jpg", tip:" сматреть fealko_08 "},
{ttl:"fealko", pic:"fealko_09.jpg", tip:" сматреть fealko_09 "},
.... и т.д.
{pic:"", ttl:"", tip:""}
);


этот массив уже вполне удобен для создания списка пользователей в алфавитном порядке с учетом расположения по возрастанию src их фоток.

результат работы всей этой лабуды можно увидеть вот тут

за сим откланиваюсь. -03-

п.с. кстати если Муерта вдруг не прочитает это а протрезвев сперва сделает свой вариант решения то интересно было бы посмотреть.
Uncaught TypeError: Изображение

Изображение
Аватара пользователя
Padonak
Философ-разговорник
 
Сообщения: 3872
Зарегистрирован: Вт дек 13, 2005 3:23
Откуда: Ростов-на-Дону

Сообщение Muerto Пн май 12, 2008 16:52

2Padonak: Увы, я прочитал это раньше, чем протрезвел и забил на это.
Кстати, я бы не откидывал все картинки кроме jpg. Кои могут быть и jpeg и JPG.
Лучше тип файла отсеевать.
Код: Выделить всё
if (exif_imagetype('$file') != IMAGETYPE_JPEG) {continue;}

А ваще, работает - и хорошо.
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Сообщение Padonak Пн май 12, 2008 23:20

2Muerto: ну да ты все правильно говоришь просто я туда картинки пихаю сам вручную и я знаю что они все будут jpg :-)

кстати я могу все это хозяйство отдать под галеру для форума тока кладите на этом серваке. я там меню немного усовершенствовал. можно и поиск сделать - джаваскриптовский будет быстро работать я думаю. там ведь и БД не надо. конечно монстры типа тебя илле всем тут известных чудовищ могут усовершенствовать галеру - там есть где применить фантазию. если надо - скажите я скрипты все отдам.
Uncaught TypeError: Изображение

Изображение
Аватара пользователя
Padonak
Философ-разговорник
 
Сообщения: 3872
Зарегистрирован: Вт дек 13, 2005 3:23
Откуда: Ростов-на-Дону

Сообщение Muerto Вт май 13, 2008 10:44

Padonak писал(а):кстати я могу все это хозяйство отдать под галеру для форума тока кладите на этом серваке. я там меню немного усовершенствовал. можно и поиск сделать - джаваскриптовский будет быстро работать я думаю. там ведь и БД не надо. конечно монстры типа тебя илле всем тут известных чудовищ могут усовершенствовать галеру - там есть где применить фантазию. если надо - скажите я скрипты все отдам.

А кто-то (не будем показывать пальцем) ведь обещал чуть ли не к новому году прошедшему новый вариант mweb выложить... -03-
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Сообщение Padonak Вт май 13, 2008 12:58

2Muerto: да кто-то работает видать много и некогда ему - чо уж его пинать. он и тут редок стал - сиранет чонить и пропадает надолго. а все это я тебе хочу сказать знаешь почему? -12- АТВОТКЕ! -12-

-13- -13- -13-
Uncaught TypeError: Изображение

Изображение
Аватара пользователя
Padonak
Философ-разговорник
 
Сообщения: 3872
Зарегистрирован: Вт дек 13, 2005 3:23
Откуда: Ростов-на-Дону


Вернуться в Архив

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

cron