упорядочение массива php путем сортировки одного из его значений - PullRequest
0 голосов
/ 27 июля 2011

У меня есть массив элементов, которые я хочу отсортировать по количеству лайков, которые каждый элемент имеет с самым высоким первым.

Я пытался заказать лайки для каждого предмета, но в способе, которым я это делал, больше не было ассоциации с исходным предметом.

Вот что я сделал:

<code>$max = $feed->get_item_quantity(); //max number of items in the array
$orderedLike;
for($i = 0; $i < $max; $i++ )
{
    $item[$i] = $feed->get_item($i); //gets single items
    $orderedLike[$i] = $item[$i]->get_like_count(); //gets number of likes for each item
}
arsort($orderedLike); //sorts the number of likes
echo '<pre>';
    foreach ( $orderedLike as $like )
    {
        echo $like . ' '; //displays the likes
    }
echo '
';

Это работает, но потом я понял, что больше не могу сортировать исходный массив элементов, потому что есть два массива. Один с количеством лайков, другой с элементами и ценностями (включая количество лайков).

Массив, который я в конечном итоге пытаюсь привести в порядок с помощью аналогичного значения: $item

Я не совсем уверен, как это сделать.

Ответы [ 2 ]

4 голосов
/ 27 июля 2011

Вы можете использовать usort для этого:

usort($item, 'cmp_by_likes');

function cmp_by_likes($a, $b){
    return $b->get_like_count()-$a->get_like_count();
}
1 голос
/ 27 июля 2011

Ты на самом деле недалеко. Вы можете использовать foreach( $arr as $key => $val ) для этого:

foreach ( $orderedLike as $key => $val )
{
    echo $item[$key]. ' '; //displays the likes
}

Но, возможно, вам лучше с usort:

// I never say this initialized.
$item = array();
// create only one array
for($i = 0; $i < $max; $i++ )
{
    // let PHP handle indexing.
    $item[] = $feed->get_item($i); //gets single items
}    
usort( $item, 'sort_by_like_count' );
// item is now sorted by get_like_count

function sort_by_like_count( $a, $b )
{
    $a = $a->get_like_count();
    $b = $b->get_like_count();
    // you can do return $a - $b here as a shortcut. I prefer being explicit as
    // 1, 0, -1 is expected more universally.
    if( $a == $b ) return 0;
    return ( $a > $b )? 1: -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...