Подсчет одинаковых значений в массиве PHP

188
02 января 2019, 12:10

Есть массивы:

$data = [
    array(
        [0] => "Автобусные",
        [1] => "Пешеходные"
    ),
    array(
        [0] => "Исторические",
        [1] => "Пешеходные",
        [2] => "Водные"
    ),
    array(
        [0] => "Пешеходные",
        [1] => "Тематические",
        [2] => "Исторические"
    )
];

Длинный способ:

$result = [];
foreach ($data as $row) {
    foreach ($row as $val) {
        if(!empty($val)) array_push($result, $val);
    }
}
$result = array_count_values($result);

Результат:

Array(
    [Автобусные] => 1
    [Пешеходные] => 3
    [Исторические] => 2
    [Водные] => 1
    [Тематические] => 1
)

Есть ли способ пересчитать значения в массивах быстрее?

Answer 1

Изначально имеем следующий массив:

$data = [
    ['Автобусные', 'Пешеходные' ],
    ['Исторические', 'Пешеходные', 'Водные'],
    ['Пешеходные', 'Тематические', 'Исторические']
];

Способ с RecursiveIteratorIterator:

foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($data)) as $v)
    $result[] = $v;
print_r(array_count_values($result));

Или вариант с использованием call_user_func_array:

print_r(array_count_values(call_user_func_array('array_merge', $data)));

Или вариант с использованием array_reduce:

print_r(array_count_values(array_reduce($data, 'array_merge', [])));
READ ALSO
Как влиять на input type date?

Как влиять на input type date?

Есть таблица в базе данных, в которой существует 4 нужных нам столбца: "date", "vsego", "zabronirovano", "nomer"

180
Как начать ключ массива с 0

Как начать ключ массива с 0

Есть массив, как я могу внутри каждого массива ключ начинать с 0

181
Таблица с помощью ajax

Таблица с помощью ajax

есть допустим таблица из 2 столбцовОна создается при нажатии на кнопку без перезагрузки страницы

211