2014-01-07 2 views
1

У меня есть цикл Еогеаспа который находит комментарий ответы и хранит их в $child_commentsСортировка объектов в массиве по наибольшему значению

После

<?php echo '<pre>'; 
print_r($child_comments); 
echo '</pre>'; ?> 

Я получаю отдельный массив для каждого из родительских комментариев:

Array 
(
    [0] => stdClass Object 
     (
      [comment_ID] => 603 
      [comment_parent] => 600 
      [user_id] => 2 
     ) 

    [1] => stdClass Object 
     (
      [comment_ID] => 601 
      [comment_parent] => 600 
      [user_id] => 2 
     ) 

) 

Array 
(
    [0] => stdClass Object 
     (
      [comment_ID] => 584 
      [comment_parent] => 580 
      [user_id] => 1 
     ) 
) 

Array 
(
    [0] => stdClass Object 
     (
      [comment_ID] => 608 
      [comment_parent] => 520 
      [user_id] => 2 
     ) 

    [1] => stdClass Object 
     (
      [comment_ID] => 598 
      [comment_parent] => 520 
      [user_id] => 2 
     ) 

    [2] => stdClass Object 
     (
      [comment_ID] => 521 
      [comment_parent] => 520 
      [user_id] => 2 
     ) 

) 

Но мне нужно отсортировать и вывести комментарии по их идентификатору комментария, от самого высокого ID до самого низкого ID.

я могу получить комментарии, которые мне нравятся с

foreach ($child_comments as $objects) { 
    echo $objects->comment_ID; 
} 

, но все они будут отсортированы по их родительскими комментариями. Есть идеи? Идеальная структура будет выглядеть примерно так:

Array 
(
    [0] => stdClass Object 
     (
      [comment_ID] => 608 
      [comment_parent] => 520 
      [user_id] => 2 
     ) 
    [1] => stdClass Object 
     (
      [comment_ID] => 603 
      [comment_parent] => 600 
      [user_id] => 2 
     ) 

    [2] => stdClass Object 
     (
      [comment_ID] => 601 
      [comment_parent] => 600 
      [user_id] => 2 
     ) 

    [3] => stdClass Object 
     (
      [comment_ID] => 598 
      [comment_parent] => 520 
      [user_id] => 2 
     ) 

    [4] => stdClass Object 
     (
      [comment_ID] => 584 
      [comment_parent] => 580 
      [user_id] => 1 
     ) 

    [5] => stdClass Object 
     (
      [comment_ID] => 521 
      [comment_parent] => 520 
      [user_id] => 2 
     ) 
) 
+0

Вы можете сделать это в самом запросе. –

+2

Возможный дубликат [PHP Sort Array By SubArray Value] (http://stackoverflow.com/questions/2477496/php-sort-array-by-subarray-value) –

+0

Запрос зависит от идентификатора родительских комментариев, чтобы найти ответы. Я старался изо всех сил, но, похоже, это не так, как в Wordpress. – psot

ответ

2

Если вы получаете каждый comments в различных arrays то сначала вы можете использовать array_merge(), чтобы создать единый массив, а затем использовать usort() чтобы sort окончательный массив, как,

<?php 
    $comments=array_merge($child_comments); 
    function cmp($a, $b) { 
     return $b['comment_ID'] - $a['comment_ID'];//use $b->comment_ID if Object 
    } 
    usort($comments, "cmp"); 
    print_r($comments); 
?> 
+0

Большое спасибо. Ваш ответ имеет большое значение для меня, помогая мне лучше понять операции массива. В моем запросе есть ошибка, которая создает пустые массивы типа 'Array()' всякий раз, когда родительский комментарий не имеет дочерних элементов. Эти пустые массивы смешиваются между теми, которые содержат мои данные, и прерывают слияние массивов, поэтому в них включаются только те массивы до первого пустого массива. Я попытаюсь исправить это, а затем вернусь к вашему предложению здесь и посмотрю, смогу ли я заставить его работать. – psot

0

Если у вас есть сложные критерии сортировки, лучший способ сделать это - перезвонить с помощью usort.

Например:

usort($arrayOfObjects, function($a, $b){ 
    if($a->comment_parent > $b->comment_parent) return 1; 
    elseif($a->comment_parent < $b->comment_parent) return -1; 
    else{ 
     // Do child compare here... 
    } 
}); 
+0

Спасибо! Я считаю, что лучшим решением для меня является попытка заставить слияние массивов работать. – psot

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