Отфильтровать ключи массива с одинаковыми значениями

У меня такой массив:

$bonusstatsarray = array(
        "bonusStat0"=> "10",
        "bonusStat1"=> "71",
        "bonusStat2"=> "40",
        "bonusStat3"=> "20",
        "bonusidbonusstat0"=> "40",
        "bonusidbonusstat1"=> "71",
    );

Я хочу найти все ключи массива с одинаковыми значениями. Поэтому я использую array filter():

$counts = array_count_values($bonusstatsarray);
$filtered = array_filter($bonusstatsarray, create_function('$value',
            'global $counts; return $counts[$value] > 1;'));
print_r($filtered);

И вот результат на данный момент:

Array
(
    [bonusStat1] => 71
    [bonusStat2] => 40
    [bonusidbonusstat0] => 40
    [bonusidbonusstat1] => 71
)

Как я могу изменить структуру выходного массива вот так:

Array
( 
     [0] => Array (  [bonusStat1] => 71
                     [bonusidbonusstat1] => 71
                   )
     [1] => Array (  [bonusStat2] => 40
                     [bonusidbonusstat0] => 40
                   )
)

Прекратите использовать create_function, он устарел. Используйте анонимную функцию.

Barmar 30.03.2021 02:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создайте ассоциативный массив, который использует значения в качестве ключей, и сгруппируйте элементы в него.

$result = [];
foreach ($bonusstatsarray as $key => $value) {
    if (isset($result[$value])) {
        $result[$value][$key] = $value;
    } else {
        $result[$value] = [$key => $value];
    }
}
$result = array_values(array_filter($result, function($list) { return count($list) > 1; })); // remove values that aren't duplicated

Спасибо. Как я могу изменить сценарий, в котором ключи массива имеют непрерывные числа, например: [0] => Array, а затем [1] => Array и так далее?

Berstos 30.03.2021 03:06

Используйте array_values() для нормализации результата.

Barmar 30.03.2021 03:07

Отлично спасибо.

Berstos 30.03.2021 03:09

Другие вопросы по теме