У меня есть следующий массив...
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?
если несложно, структура массива изменена? вы можете изменить, как вам нравится, и я могу адаптировать его здесь. Основная проблема заключается в создании таблицы из массива, похожего на приведенную выше структуру.






Что-то вроде этого будет делать то, что вы хотите. Он обрабатывает каждый элемент массива, ищет допустимое значение 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
Примечание. Я использую @ перед операторами приращения, чтобы избежать ошибок «Неопределенный индекс», когда имя встречается впервые. Если вы не хотите этого делать, вы можете использовать ?? (оператор объединения 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;