【发布时间】:2014-12-10 05:37:13
【问题描述】:
问题已更新以澄清
对于简单的数组,我发现使用$arr[$key]++ 填充新元素或增加现有元素很方便。例如,计算水果的数量,$arr['apple']++ 将在第一次遇到“apple”时创建数组元素$arr('apple'=>1)。随后的迭代只会增加“apple”的值。无需添加代码来检查键“apple”是否已存在。
我正在填充一个数组数组,并希望在嵌套数组的元素中实现与上述示例类似的“单线”。
$stats 是数组。 $stats 中的每个元素都是另一个具有 2 个键(“name”和“count”)的数组
我希望能够将数组推入$stats - 如果键已经存在,只需增加“计数”值。如果它不存在,则创建一个新的元素数组并将计数设置为 1。并在一行中执行此操作,就像上面的简单数组示例一样。
在代码中,这看起来像(但不起作用):
$stats[$key] = array('name'=>$name,'count'=>++);
or
$stats[$key] = array('name'=>$name,++);
寻找有关如何在无需检查元素是否已存在的情况下实现此目的的想法。
背景:
我在一组对象中循环,查看每个对象中的“数据”元素。这是数组中的一个片段:
[1] => stdClass Object
(
[to] => stdClass Object
(
[data] => Array
(
[0] => stdClass Object
(
[name] => foobar
[id] => 1234
)
)
)
我想计算“id”的出现次数并将其与“name”相关联。 (“id”和“name”是唯一的组合 - 例如,name="foobar" 将始终具有 id=1234)
即
id name count
1234 foobar 55
6789 raboof 99
我目前正在使用数组数组$stats 来捕获信息(我对其他实现持开放态度。我查看了array_unique 但我的原始数据在数组和对象的深处) .
第一次遇到“id”(例如1234),我会在$stats创建一个新数组,并将计数设置为1。对于后续命中(例如:id=1234),我只想增加count。
对于一维数组,$arr[$obj->id]++ 工作正常,但我不知道如何为数组数组推送/递增。对于多维数组,如何在一行中推送/递增?
提前致谢。
$stats = array();
foreach ($dataArray as $element) {
$obj = $element->to->data[0];
// this next line does not meet my needs, it's just to demonstrate the structure of the array
$stats[$obj->id] = array('name'=>$obj->name,'count'=>1);
// this next line obviously does not work, it's what I need to get working
$stats[$obj->id] = array('name'=>$obj->name,'count'=>++);
}
【问题讨论】:
-
如果数组中不存在 $key,您确定 $array[$key]++ 可以正常工作吗?我还没有找到使用 isset() if 条件的方法。这种丑陋真的让我很恼火,因为我来自 perl 背景,您可以 ++ 或几乎对不存在的数组索引执行任何其他操作并动态创建它。
-
@ChrisNadovich 是的,我经常使用它。 php 5+ 和 7+
-
它会引发警告。你至少需要用
@压制它,这更讨厌