【发布时间】:2018-04-24 11:31:01
【问题描述】:
大家好,我有以下场景
$col = new ArrayObject();
for ($i = 0; $i < 5; $i++)
{
$objItem = new stdClass;
$objItem->someVar = $i;
$col->append($objItem);
}
现在我想通过offsetUnset 删除一些密钥并执行以下操作
foreach($col AS $key => $objItem)
{
if ($key == 2)
{
$col->offsetUnset($key);
}
echo $key.'\n';
}
现在有趣的是意外的输出
0
1
2
4
为了更好的说明 - 如果你把一个继续像
foreach($col AS $key => $objItem)
{
if ($key == 2)
{
$col->offsetUnset($key);
continue;
}
echo $key.'\n';
}
输出是
0
1
4
我从没想过它会绕过 key 数字 3 在这个 3 只是因为我删除了前一个项目 - 看起来内部指针增加了两次或类似的东西......
请记住,我也尝试过类似的方法
$it = $col->getIterator();
foreach($it AS $key => $objItem)
{
if ($key == 2)
{
$col->offsetUnset($key);
}
echo $key."\n";
}
输出是一样的
问题:
这是正常行为还是我在这里忽略了一些重要的事情?
pS:正如 nigel Ren 指出的那样,这可能与 Php, Spl, ArrayIterator 重复,我必须指出我在这里寻找 ArrayObject 解决方案,但没有找到任何解决方案(我现在知道 ArrayIterator 问题可能是相同)-但我永远不会猜到这些是相互关联的-在这方面,我恳求不要结束这个问题,因为它也可能对其他人有所帮助
【问题讨论】:
-
请分享任何现场演示?
-
检查
var_dump($col);你会发现这不是问题,它按预期工作(索引从 0 开始,所以 key ==2 代表数组的第三个值) -
@AlivetoDie 我的数组对象包含 5 个值 - 键值 2 是第三个元素,但在删除键值 2 后我没有得到键值为 3 的第四个元素 ...
-
@NigelRen 我会检查它 - 但请记住,我在这里寻找
ArrayObject解决方案但没有找到任何(我现在知道 ArrayIterator 问题可能相同) - 但是我永远不会猜到这些是相互关联的——在这方面,我恳求不要结束这个问题,因为它也可能对其他人有所帮助
标签: php