Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> usort compare 
:(
    Опции темы
bars80080
Дата 26.11.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



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

usort($ar, 'compare'); - куда здесь засунуть аргументы?

что-то вроде usort($ar, function(){compare($m)}); ?
PM MAIL WWW   Вверх
solenko
Дата 26.11.2008, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Как-то так:
Код

function sort_array(&data, $field) {
  usort($data, create_function('$a, $b', 'if ($a["'.$filed.'"] ==  ($b["'.$filed.'"]) return 0; return $a["'.$filed.'"] <  ($b["'.$filed.'"]'));
}

//написано на коленке так что ошибок может содержать массу -- написано только для того чтобы показать принцип


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
bars80080
Дата 26.11.2008, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



что-то мне не нравится. это тоже самое, что писать каждый раз. я имел ввиду, чтоб вызов был вроде: usort($ar, 'compare', $m);
где $m - массив ключей по которым надо отсортировать (хотя конечно возникает вопрос в каком порядке)

в принципе, можно на этом примере, конечно построить некую функцию, которая будет сама строить пользовательскую. но я надеялся, что кто-то уже сделал этот велосипед
PM MAIL WWW   Вверх
bars80080
Дата 5.2.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



да, что-то она на меня действует как проклятие, хотя всё уже здесь. пример, solenko, конечно помог

вот как выглядит эта функция:

Код

function sort_array(&$data, $p, $k = array(1)) {
    $c = count($p); $txt = '';
    for($i = 0; $i < $c; $i++) {
        if(empty($k[$i])) { $k[$i] = 1; }
        if($i != 0) { $txt .= 'else'; }
        $txt .= 'if($a["'.$p[$i].'"] > $b["'.$p[$i].'"]) { return '.$k[$i].'*1; }';
        $txt .= 'elseif($a["'.$p[$i].'"] < $b["'.$p[$i].'"]) { return '.$k[$i].'*(-1); }';
        if($i == ($c - 1)) { $txt .= ' else { return 0; }'; }
    }
    usort($data, create_function('$a, $b', $txt));
}
вот как ей пользоваться:
Код

$ar = array(
        array('name'=>'a', 'type'=>2),
        array('name'=>'b', 'type'=>1),
        array('name'=>'c', 'type'=>3),
        array('name'=>'a', 'type'=>4),
        array('name'=>'b', 'type'=>8),
        array('name'=>'c', 'type'=>6),
        array('name'=>'a', 'type'=>9),
        array('name'=>'b', 'type'=>8),
        array('name'=>'c', 'type'=>7),
        );

sort_array($ar, array('name', 'type'), array(1, -1));  // сортируемый массив, порядок полей сортировки, направление сортировки для каждого поля

echo '<pre>';
var_dump($ar);
echo '</pre>';



остался один вопрос. слышал, что ссылка на переменную вскоре уйдёт в прошлое. так или нет? и как заменить её, если так? хотя бы на примере этой функции
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.