php - 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
我尝试了不同的方法,包括 php 中的 foreach、for 和 while 循环,但没有运气……我如何在 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
注意我@
在增量语句前面使用以避免在第一次遇到名称时出现“未定义索引”错误。如果你不想这样做,你可以使用 ?? PHP7 中的(NULL 合并运算符)例如
$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;
推荐阅读
- python-3.x - 关于 A 值的消息正在尝试在 DataFrame 中的切片副本上设置
- date - 将“dd/mm/yyyy”解析为 Date Kotlin
- matplotlib - 在 matplotlib 中将 colorbar 应用于轮廓的问题
- c++ - C++中的CommonHMAC
- winforms - 无边框 BlazorDesktop 拖动表单
- database - 关系数据库中的建模继承
- laravel - 如何添加用户可以删除自己的数据的功能
- php - 摆脱 google api lib 中任何不必要的依赖项
- parsing - 自定义 SQL 函数/扩展的语法
- wordpress - 帖子表中的可排序自定义列