У меня такой массив:
$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
)
)






Создайте ассоциативный массив, который использует значения в качестве ключей, и сгруппируйте элементы в него.
$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 и так далее?
Используйте array_values() для нормализации результата.
Отлично спасибо.
Прекратите использовать
create_function, он устарел. Используйте анонимную функцию.