我有以下数组...
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中实现以上表格?
如果容易,数组结构会改变吗?欢迎您随意更改,我可以在此处进行调整。主要问题是从数组生成表,就像上面的结构一样。
答案 0 :(得分: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
请注意,在第一次遇到名称时,我在增量语句前面使用@
以避免“未定义的索引”错误。如果您不想这样做,可以使用??。 (例如PHP7中的NULL合并运算符)
$counts[$item['name_two']] = ($counts[$item['name_two']] ?? 0) + 1;
或7之前的PHP
$counts[$item['name_two']] = (isset($counts[$item['name_two']]) ? $counts[$item['name_two']] : 0) + 1;