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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка вложенных массивов 
V
    Опции темы
MoLeX
Дата 19.9.2008, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Привет. возник следующий вопрос, есть код
Код

<?php
//    Как должно быть по шаблону
    $shablon = array("0" => "поле0",
                    "1" => "поле1",
                    "2" => "поле2",
                    "3" => "поле3");

//    Как приходит результат                     
    $result = array("0" => array("поле3" => array("12", "22")),
                 "1" => array("поле0" => array("вася", "петя")),
                 "2" => array("поле1" => array("привет", "пака")),
                 "3" => array("поле2" => array("qwerty")));                 
?>


необходимо так пересортировать массив $result чтобы на выходе получилось следующие
Код

//    Как должно получиться
    $result = array("0" => array("поле0" => array("вася", "петя")),
                 "1" => array("поле1" => array("привет", "пака")),
                 "2" => array("поле2" => array("qwerty")), 
                 "3" => array("поле3" => array("12", "22")));    


что-то у меня это не как не выходит  smile 



--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
americanets
Дата 19.9.2008, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 5
Всего: 12



MoLeX, 

так ?

Код

$result = array("0" => array("поле3" => array("12", "22")),
                 "1" => array("поле0" => array("вася", "петя")),
                 "2" => array("поле1" => array("привет", "пака")),
                 "3" => array("поле2" => array("qwerty"))); 

usort( $result, _sort );

var_dump($result);
function _sort($a, $b) {
    $a = array_keys($a);
    $b = array_keys($b);
    $s1 = strtolower($a[0]);
    $s2 = strtolower($b[0]);
            if ( strcmp($s1,$s2)==1 ) {
            return true;
        } else {
            return false;
        }
}



--------------------
Пусть популярную музыку слушают те, среди кого она популярна
PM   Вверх
teroni
Дата 19.9.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 8
Всего: 22



Код

$result = array("0" => array("поле3" => array("12", "22")),
                 "1" => array("поле0" => array("вася", "петя")),
                 "2" => array("поле1" => array("привет", "пака")),
                 "3" => array("поле2" => array("qwerty")));
foreach ($result as $k=>$v)
   foreach ($v as $k1=>$v1)
      $result1[$k1] = $v1;
ksort($result1);
foreach ($result1 as $k=>$v)
   $result2[][$k] = $v;
print_r($result2);

PM MAIL   Вверх
MoLeX
Дата 19.9.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



americanets, 
teroni, спасибо...

все завязываю ложиться спать поздно, обязуюсь в 9-00 уже лежать в постели  smile 

Добавлено через 7 секунд
да обоим по +1


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
sTa1kEr
Дата 19.9.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


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

Репутация: 56
Всего: 146



Если я правильно понял, то сортировать надо по переменной $shablon? Тогда по хорошему будет примерно так:
Код

class TemplateCompare
{
    private $template;
    public function __construct($template)
    {
        $this->template = array_flip($template);
    }

    protected function compare($left, $right)
    {
        $one = isset($this->template[key($left)]) ? $this->template[key($left)] : 0;
        $two = isset($this->template[key($right)]) ? $this->template[key($right)] : 0;
        return ($one == $two ? 0 : (($one < $two) ? -1 : 1));
    }

    public function sort(array &$array)
    {
        usort($array, array($this, 'compare'));
    }
}

// Проверяем
// ------------

   $shablon = array("0" => "поле0",
                    "1" => "поле1",
                    "2" => "поле2",
                    "3" => "поле3");
//    Как приходит результат
    $result = array("0" => array("поле3" => array("12", "22")),
                 "1" => array("поле0" => array("вася", "петя")),
                 "2" => array("поле1" => array("привет", "пака")),
                 "3" => array("поле2" => array("qwerty")));

$tmpl = new TemplateCompare($shablon);
$tmpl->sort($result);
var_dump($result);


Не могу не попиарить PHP 5.3 smile, на нем тоже самое можно написать примерно так (без проверок на isset):
Код

$t = array_flip($shablon);
usort($result, function ($l, $r) using ($t) { 
    return ($t[key($l)] == $t[key($r)] ? 0 : (($t[key($l)] < $t[key($r)]) ? -1 : 1));
});


Это сообщение отредактировал(а) sTa1kEr - 19.9.2008, 17:35
PM MAIL   Вверх
MoLeX
Дата 21.9.2008, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



sTa1kEr, да ты прав так вернее, но к тому времени как я прочитал ответы уже этот вопрос решил)
но все равно спасибо, на будущее буду знать)


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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