Сортировка сложного массива php в таблицу

У меня есть следующий массив...

Array
(
    [main] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [name_one] => banana
                    [name_two] => 
                )

            [1] => Array
                (
                    [id] => 2
                    [name_one] => orange
                    [name_two] => banana
                )

            [2] => Array
                (
                    [id] => 3
                    [name_one] => 
                    [name_two] => orange
                )

            [3] => Array
                (
                    [id] => 4
                    [name_one] => pear
                    [name_two] => 
                )
            [4] => Array
                (
                    [id] => 5
                    [name_one] => pear
                    [name_two] => mango
                )
            [5] => Array
                (
                    [id] => 6
                    [name_one] => 
                    [name_two] => 
                )

        )

)

логика следующая, Если поле "name_two" не пустое, игнорируйте "name_one" и учитывайте только "name_two". Если поле "name_two" пусто, берется "name_one" и подсчитывается. Если оба пусты... Не считается.

Результат из приведенного выше массива должен выглядеть как следующая таблица...

------------------------------
category   |  total
------------------------------
banana     |    2
-----------------------------
orange     |    1
-----------------------------
pear       |    1
-----------------------------
mango      |    1
-----------------------------
Total      |    5

Я пробовал другой метод, включая цикл foreach, for и while в php, но не повезло... Как мне получить приведенную выше таблицу в php?

если несложно, структура массива изменена? вы можете изменить, как вам нравится, и я могу адаптировать его здесь. Основная проблема заключается в создании таблицы из массива, похожего на приведенную выше структуру.

Стоит ли изучать 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 и хотите разрабатывать...
1
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Что-то вроде этого будет делать то, что вы хотите. Он обрабатывает каждый элемент массива, ищет допустимое значение name_two, а если нет, то действительное значение name_one, и увеличивает счетчик этого значения.

$counts = array();
foreach ($array['main'] as $item) {
    if (!empty($item['name_two'])) {
        @$counts[$item['name_two']]++;
    }
    elseif (!empty($item['name_one'])) {
        @$counts[$item['name_one']]++;
    }
}
foreach ($counts as $key => $count) {
    echo "$key: $count\n";
}

Вывод:

banana: 2
orange: 1 
pear: 1 
mango: 1

Демо на 3v4l.org

Примечание. Я использую @ перед операторами приращения, чтобы избежать ошибок «Неопределенный индекс», когда имя встречается впервые. Если вы не хотите этого делать, вы можете использовать ?? (оператор объединения NULL) в PHP7, например.

$counts[$item['name_two']] = ($counts[$item['name_two']] ?? 0) + 1;

или в PHP до 7

$counts[$item['name_two']] = (isset($counts[$item['name_two']]) ? $counts[$item['name_two']] : 0) + 1;

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