Получить 5 лучших значений из многомерного массива в PHP - PullRequest
0 голосов
/ 15 июля 2011

У меня есть следующий массив:

Array ( 
[0] => Array ( 
    [count] => 9 
    [user_id] => 2 
) 
[1] => Array ( 
    [count] => 25 
    [user_id] => 1 
) 
[2] => Array ( 
    [count] => 20 
    [user_id] => 3 ) 
[3] => Array ( 
    [count] => 6 
    [user_id] => 56 ) 
[4] => Array ( 
    [count] => 2 
    [user_id] => 37 ) 
[5] => Array ( 
    [count] => 1 
    [user_id] => 0 
))

Это просто пример.Фактический массив будет содержать еще много вложенных массивов.

Мне нужно иметь возможность получить первые пять значений из "count" и сохранить их вместе с ассоциированным с ними "user_id".

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

Array ( 
[0] => Array ( 
    [count] => 25 
    [user_id] => 1 
) 
[1] => Array ( 
    [count] => 20 
    [user_id] => 3
) 
[2] => Array ( 
    [count] => 9 
    [user_id] => 2 
)   
[3] => Array ( 
    [count] => 6 
    [user_id] => 56 
)  
[4] => Array ( 
    [count] => 2 
    [user_id] => 37 
) 
[5] => Array ( 
    [count] => 1 
    [user_id] => 0 
) )

Если это можно сделать, просто переупорядочив массив, это нормально.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Вы ищете usort и array_slice.

Пример:

<?php

$array = array(
  array(
    'count' => 9,
    'user_id' => 2
  ),
  array(
    'count' => 25,
    'user_id' => 1
  ),
  array(
    'count' => 20,
    'user_id' => 3
  ),
  array(
    'count' => 6,
    'user_id' => 56
  ),
  array(
    'count' => 2,
    'user_id' => 37
  ),
  array(
    'count' => 1,
    'user_id' => 0
  )
);

function usort_callback($a, $b)
{
  if ( $a['count'] == $b['count'] )
    return 0;

  return ( $a['count'] > $b['count'] ) ? -1 : 1;
}

usort($array, 'usort_callback');

$top5 = array_slice($array, 0, 5);

print_r($top5);

Выходы:

Array
(
    [0] => Array
        (
            [count] => 25
            [user_id] => 1
        )

    [1] => Array
        (
            [count] => 20
            [user_id] => 3
        )

    [2] => Array
        (
            [count] => 9
            [user_id] => 2
        )

    [3] => Array
        (
            [count] => 6
            [user_id] => 56
        )

    [4] => Array
        (
            [count] => 2
            [user_id] => 37
        )

)
1 голос
/ 15 июля 2011
usort($array, function ($a, $b) { return $b['count'] - $a['count']; });
$top5 = array_slice($array, 0, 5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...