Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка многомерных массивов по одной из его “веток”
 
 автор: tima2010   (08.10.2011 в 18:52)   письмо автору
 
 

Добрый вечер! Есть многомерный массив, можно ли как нибудь отсортировать его к примеру по ветке post_title

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

пример массива:



Array 

    [2715] => stdClass Object 
        ( 
            [ID] => 2715 
            [post_author] => 1 
            [post_date] => 2011-10-07 15:35:02 
            [post_date_gmt] => 2011-10-07 10:35:02 
            [post_content] => 
            [post_title] => DSC_3317
            [post_excerpt] => 
            [post_status] => inherit 
            [comment_status] => open 
            [ping_status] => closed 
            [post_password] => 
            [post_name] => DSC_3317
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2011-10-07 15:35:02
            [post_modified_gmt] => 2011-10-07 10:35:02 
            [post_content_filtered] => 
            [post_parent] => 2714 
            [guid] => http://www.url.ru/wp-content/uploads/2011/10/DSC_3317.jpg 
            [menu_order] => 0 
            [post_type] => attachment 
            [post_mime_type] => image/jpeg 
            [comment_count] => 0 
            [filter] => raw 
        ) 
    [2716] => stdClass Object 
        ( 
            [ID] => 2716 
            [post_author] => 1 
            [post_date] => 2011-10-07 15:35:32 
            [post_date_gmt] => 2011-10-07 10:35:32 
            [post_content] => 
            [post_title] => DSC_2317
            [post_excerpt] => 
            [post_status] => inherit 
            [comment_status] => open 
            [ping_status] => closed 
            [post_password] => 
            [post_name] => DSC_2317
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2011-10-07 15:35:32
            [post_modified_gmt] => 2011-10-07 10:35:32
            [post_content_filtered] => 
            [post_parent] => 2714 
            [guid] => http://www.url.ru/wp-content/uploads/2011/10/DSC_2317.jpg 
            [menu_order] => 0 
            [post_type] => attachment 
            [post_mime_type] => image/jpeg 
            [comment_count] => 0 
            [filter] => raw 
        ) 


  Ответить  
 
 автор: cheops   (08.10.2011 в 19:47)   письмо автору
 
   для: tima2010   (08.10.2011 в 18:52)
 

Проще всего сформировать новый массив, в качестве ключей которого будет выступать не ID, а post_title, после чего отсортировать массив при помощи функции ksort() по ключам. Все это, конечно, будет справедливым только в том случае, если post_title - уникальное значение для каждого из элементов массива.

  Ответить  
 
 автор: tima2010   (08.10.2011 в 19:49)   письмо автору
 
   для: cheops   (08.10.2011 в 19:47)
 

Проще да, но нужно именно при такой структуре массива... :(

  Ответить  
 
 автор: cheops   (08.10.2011 в 19:51)   письмо автору
 
   для: tima2010   (08.10.2011 в 19:49)
 

Правильно ли я понимаю, что это данные из MySQL и воспользоваться средствами сортировки MySQL тоже нельзя?

  Ответить  
 
 автор: tima2010   (08.10.2011 в 19:56)   письмо автору
 
   для: cheops   (08.10.2011 в 19:51)
 

Да это из mysql воспользоваться можно, но в моем случае нужно подойти методом сортировки без помощи mysql

  Ответить  
 
 автор: cheops   (08.10.2011 в 20:08)   письмо автору
 
   для: tima2010   (08.10.2011 в 18:52)
 

Можно начать отталкиваться от следующего скрипта
<?php
  
// Вспомогательный класс, чтобы воспроизвести
  // ситуацию
  
class inter
  
{
    public 
$post_title;
    public function 
__construct($post_title)
    {
      
$this->post_title $post_title;
    }
  }
  
// Неотсортированный массив
  
$arr[2714] = new inter("DSC_3317");
  
$arr[2715] = new inter("DSC_5317");
  
$arr[2716] = new inter("DSC_4317");
  
$arr[2717] = new inter("DSC_2317");
  
// Выводим для контроля
  
echo "<pre>";
  
print_r($arr);
  echo 
"</pre>";
  
// Сортируем массива
  
uasort($arr"cmp_inter");
  
// Выводим отсортированный массив
  
echo "<pre>";
  
print_r($arr);
  echo 
"</pre>";
  
// Функция обратного вызова
  
function cmp_inter($a$b
  {
    if (
$a->post_title == $b->post_title) {
        return 
0;
    }
    return (
$a->post_title $b->post_title) ? -1;
  }
?>

  Ответить  
 
 автор: tima2010   (08.10.2011 в 20:23)   письмо автору
 
   для: cheops   (08.10.2011 в 20:08)
 

cheops, большое спасибо, буду разбираться

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования