@aleps

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

Доброе время суток
у меня довольно таки, как мне кажется, глупый вопрос, но никак не могу с им справиться

Мне нужно посчитать количество одинаковых значений в массиве

То есть, найти массивы с одинаковым значением ключа "user" удалить все кроме одного и подсчитать сколько их было, а количество сохранить, например в тот-же ключ "id"
чтобы из этого
Array
(
    [0] => Array
        (
            [id] => 367
            [user] => text
        )

    [1] => Array
        (
            [id] => 370
            [user] => text
        )

    [2] => Array
        (
            [id] => 432
            [user] => text1
        )

    [3] => Array
        (
            [id] => 234
            [user] => text33
        )
    [4] => Array
        (
            [id] => 264
            [user] => text33
        )
)


стало как-то-то так

Array
(
    [0] => Array
        (
            [cout или тот же id] = 2
            [user] => text
        )

    [2] => Array
        (
            [id] => 432
            [user] => text1
        )

    [3] => Array
        (
            [cout или тот же id] = 2
            [user] => text33
        )
)
  • Вопрос задан
  • 361 просмотр
Решения вопроса 1
sergiks
@sergiks Куратор тега PHP
♬♬
Я бы сделал с промежуточным массивом, где ключи – встреченные значения user:
function mergeCount($arr) {

	$keys = [];
	foreach($arr as $item) {
		$id = $item['id'];
		$user = $item['user'];

		if( isset( $keys[ $user])) {
			$keys[ $user]['count']++;
		} else {
			$keys[$user] = [
				'id' => $id,
				'count' => 1
			];
		}
	}
	
	$result = [];
	foreach($keys as $user=>$item) {
		$result[] = [
			'id' => $item['count'] > 1 ? $item['count'] : $item['id'],
			'user' => $user
		];
	}
	
	return $result;
}

Тест
$data = [
	['id'=>367, 'user'=>'text'],
	['id'=>370, 'user'=>'text'],
	['id'=>432, 'user'=>'text1'],
	['id'=>234, 'user'=>'text33'],
	['id'=>264, 'user'=>'text33'],
];	
$a = mergeCount($data);
print_r($a);
Результат теста
Array
(
    [0] => Array
        (
            [id] => 2
            [user] => text
        )

    [1] => Array
        (
            [id] => 432
            [user] => text1
        )

    [2] => Array
        (
            [id] => 2
            [user] => text33
        )
)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы