2013-07-18 2 views
-2

В php .... Как я могу отсортировать следующий пример с помощью «attachment_id» под каждым отдельным массивом [image] [videoembed] [и т. Д.] Таким образом, [изображение] будет заказано 691,692,699, а затем [videembed] было бы заказано аналогично, если их было больше 1 ... и т. д.php - сортировка массива по под-объекту

Я действительно надеюсь, что это имеет смысл.

спасибо, что все.

(
    [image] => Array 
    (
     [0] => stdClass Object 
      (
       [title] => 77007_433592946695465_6701985_n.jpg      
       [attachment_id] => 699 
      ) 

     [1] => stdClass Object 
      (
       [title] => 253163_10151127010009522_736212653_n.jpg 
       [attachment_id] => 692 
      ) 

     [2] => stdClass Object 
      (
       [title] => 263893_10150217397944522_4550001_n.jpg 
       [attachment_id] => 691 
      ) 

    ) 

[videoembed] => Array 
    (
     [0] => stdClass Object 
      (     
       [title] => YouTube 
       [attachment_id] => 692 
      ) 

    ) 

[] => Array 
    (
     [0] => stdClass Object 
      (
       [title] => yada.jpg      
       [attachment_id] => 688 
      ) 

    ) 

) 

ответ

1

Вы можете использовать и дать пользовательскую функцию сравнения.

+0

Это то, что я пытаюсь, но не могу заставить его работать: Код: функция CMP ($ а, $ б) { \t \t возвращение $ a- > attachment_id - $ b-> attachment_id; \t \t} $ a \t = $ p-> get_attached_array(); \t \t $ newarray = array(); \t \t \t \t \t \t Еогеасп ($ в качестве $ attach_type) {// $ attach_type = суб массивы в основной массив ($ а) ... изображение массива, vieoembed массива и т.д. \t \t \t $ newarray [] = usort ($ attach_type, 'cmp'); \t \t} \t \t \t \t print_r ($ newarray); –

+0

Я не уверен, что правильно понял ваш вопрос, но если вы хотите, чтобы ваш массив сортировался сначала по «типу» (изображение, видеоролик), а затем по идентификатору вложения, вам нужно сделать два вида сначала, используя usort сортировать вспомогательные массивы, а затем конкатрировать их и сортировать по клавише (ksort). Я не уверен, что это можно сделать с помощью одного вида, но, возможно, это может быть искаженное использование с некоторым глобальным состоянием. – erdeszt

1

Использование usort, как показано ниже:

function cmp($a, $b) { 
    if( $a->attachment_id == $b->attachment_id){ return 0 ; } 
    return ($a->attachment_id< $b->attachment_id) ? -1 : 1; 
} 

for($i=0, $i<len($imagearray), $i++) 
{ 
    usort($imagearray,'cmp');//assign image array to $imagearray 
} 
+0

[image] является подмассивом родительского массива. так что это: mainarray-> image array-> objects-> attachment_id mainarray-> videoembed array-> objects-> attachment_id , так что хотите отсортировать все объекты в массиве mainarray-> с помощью идентификатора вложения и то же самое для videoembed массив и т. д., сохраняя их под контролем. Если это имеет смысл. –

+0

Вы можете попробовать, так как код, указанный выше, не проверен. Я прямо писал здесь. Пожалуйста, сообщите код, который работает. –

+0

Это то, что я пробовал, похоже, но не могу заставить его работать: $ a = $ p-> get_attached_array(); (мы получаем массив здесь) \t \t $ newarray = array(); \t \t \t \t функция CMP ($ а, $ б) { \t \t возврата ($ a-> attachment_id < $b-> attachment_id)? -1: 1; \t \t} \t \t Еогеасп ($ в качестве $ attach_type) { \t \t \t $ newarray [] = usort ($ attach_type, 'CMP'); \t \t} \t \t \t \t print_r ($ newarray); –

Смежные вопросы