PHP如何迭代数组来计算元素



我想知道如何在PHP中迭代数组来计算元素,我接下来会尝试

foreach ($items as $item) {
$tm[$item->provider->name] = [];
foreach ($items as $item) {
$tm[$item->provider->name][$item->product->brand->name] = isset($tm[$item->provider->name][$item->product->brand->name]) ? $tm[$item->provider->name][$item->product->brand->name] + 1 : $tm[$item->provider->name][$item->product->brand->name] = 1;
}
}

但是我得到一个错误的结果,我得到了一个数组,但我得到了非常高的数字计数,好像迭代了很多次

阵列的结构如下

[{
"id": 1,
"product": {
"id": 1,
"brand": {
"id": 1,
"name": "iphone"
}
},
"provider": {
"id": 1,
"name": "at&t"
}
},
{
"id": 2,
"product": {
"id": 2,
"brand": {
"id": 2,
"name": "iphone"
}
},
"provider": {
"id": 1,
"name": "at&t"
}
},
{
"id": 3,
"product": {
"id": 3,
"brand": {
"id": 3,
"name": "iphone"
}
},
"provider": {
"id": 1,
"name": "t-mobile"
}
}]

IIUC,您正在尝试计算每个provider->nameproduct->brand->name值。你可以使用以下代码:

$tm = array();
foreach ($items as $item) {
$product = $item->product->brand->name;
$provider = $item->provider->name;
$tm[$provider][$product] = ($tm[$provider][$product] ?? 0) + 1;
}
print_r($tm);

输出(用于您的样本数据(:

Array
(
[at&t] => Array
(
[iphone] => 2
)
[t-mobile] => Array
(
[iphone] => 1
)
)

3v4l.org 上的演示

从您的代码示例中,您显然想计算每个"的出现次数;事物;在您的数组中,否则count()可能已经足够了。。。

尽管您正在做大量的工作来预初始化计数数组,但这是完全不必要的:阅读有关自动激活的内容。

这样的代码可能就足够了(我这里不遵循你的示例代码——你需要根据自己的需求进行计算(:

$counters = [];
foreach ($items as $item)
@$counters[$item->name][$item->model]++;

最新更新