Задать вопрос

Как можно сравнить значения массивов, подсчитать их и вывести в сортировке?

Здравствуйте.
Имеется вот такой php массив (его print_r результат):
Результат массива
Array
(
    [0] => Array
        (
            [itemid] => 11
            [kolvo] => 1
        )

    [1] => Array
        (
            [itemid] => 4309
            [kolvo] => 1
        )

    [2] => Array
        (
            [itemid] => 11
            [kolvo] => 1
        )

    [3] => Array
        (
            [itemid] => 4309
            [kolvo] => 1
        )

    [4] => Array
        (
            [itemid] => 11
            [kolvo] => 1
        )

    [5] => Array
        (
            [itemid] => 4309
            [kolvo] => 1
        )

    [6] => Array
        (
            [itemid] => 2689
            [kolvo] => 1
        )

    [7] => Array
        (
            [itemid] => 4445
            [kolvo] => 1
        )

    [8] => Array
        (
            [itemid] => 10
            [kolvo] => 1
        )

    [9] => Array
        (
            [itemid] => 3324
            [kolvo] => 1
        )

    [10] => Array
        (
            [itemid] => 3372
            [kolvo] => 1
        )

)



Создается таким образом в движке:
foreach($items as $item) {
	$massiv[] = array(
		'itemid'=>$item[id],
		'kolvo'=>1
	);
}


Нужно сравнить результаты по ключу [itemid] и в случае совпадения - сложить их [kolvo] и вывести в сортировке от большего значения [kolvo] к меньшему. т.е. массив к такому виду:
Какой результат нужен
Array
(
    [0] => Array
        (
            [itemid] => 11
            [kolvo] => 3
        )

    [1] => Array
        (
            [itemid] => 4309
            [kolvo] => 3
        )

    [2] => Array
        (
            [itemid] => 2689
            [kolvo] => 1
        )

    [3] => Array
        (
            [itemid] => 4445
            [kolvo] => 1
        )

    [4] => Array
        (
            [itemid] => 10
            [kolvo] => 1
        )

    [5] => Array
        (
            [itemid] => 3324
            [kolvo] => 1
        )

    [6] => Array
        (
            [itemid] => 3372
            [kolvo] => 1
        )

)



Уже который час бьюсь никак не могу привести к виду, обращаюсь к вам ув. мастера, подскажите как правильно сделать
  • Вопрос задан
  • 72 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
VladimirAndreev
@VladimirAndreev
php web dev
foreach($items as $item) {
	
	if(!isset($result[$item['id']]) { 
		$result[$item['id']] = 0;
	}
	
	$result[$item['id']]++;
}

arsort($result);
Ответ написан
@smartycms Автор вопроса
Решил вопрос сам.
Решение
// Для примера
$items = array (
  array('id'=>3249),
  array('id'=>11),
  array('id'=>3249),
  array('id'=>134),
  array('id'=>11),
  array('id'=>11),
  array('id'=>542),
  array('id'=>542),
  array('id'=>542),
  array('id'=>542),
  array('id'=>542),
  array('id'=>2546),
  array('id'=>3849),
  array('id'=>3249),
  array('id'=>3249)
);
// End для примера


$result = array();

foreach($items as $item){
  $result[] = array(
    'kolvo'=>1,
    'itemid'=>$item['id']
  );
}

$grouped = [];
foreach ($result as $r) {
  $key = $r['itemid'];
  if (!isset($grouped[$key])) {
    $grouped[$key] = $r;
  } else {
    $grouped[$key]['kolvo'] += $r['kolvo'];
  }
}

sort($grouped);
natsort($grouped);
$grouped = array_reverse($grouped);

print_r($grouped);

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы