如何在 PHP 中使用 ArrayIterator 附加带有键的元素?
How do I append an element with a key using ArrayIterator in PHP?
除了基本参数参考之外,PHP 站点上没有关于 ArrayIterator
对象的文档,所以我什至不确定这是否可行。
我从基本意义上理解了 ArrayIterator
的概念,就像这个例子:
$rows = new ArrayIterator(array('a', 'b', 'c'));
foreach ($rows as $row) {
echo "<p>This is row {$a}.</p>";
}
在我的例子中,行数组有点复杂(尽管为了这个例子仍然被简化了)...
$rows = array(
'a' => NULL,
'b' => array('d' => NULL, 'e' => NULL, 'f' => NULL),
'c' => NULL
);
$rows = new ArrayIterator($rows);
这个想法是 'b'
在这种情况下,有许多子元素应该被解析,就好像它们是父元素一样,在最后(不是需要按顺序处理)其余父元素(a、b、c)。
通常我会使用...
foreach ($child as $c) {
$rows->append($c);
}
但在这种情况下,$child
是一个包含我要维护的键的数组...
foreach ($child as $key => $c) {
$rows->append($c); // but what about $key???
}
我不想在末尾添加数组作为元素,我想添加 key 和 value到父列表,所以我们最终会得到....
$rows = array(
'a' => ...,
'b' => ...,
'c' => ...,
'd' => ...,
'e' => ...,
'f' => ...
);
问题:是否可以从一个 foreach 循环 和 一个键将一个元素追加到当前迭代数组?
ArrayIterator
实现了 ArrayAccess
接口。也就是说offsetset
可用,可以给指定的offset赋值
如 foreach 文档所述:
In order to be able to directly modify array elements within the loop
precede $value with &. In that case the value will be assigned by
reference.
但在这种情况下不需要。
$rows = array(
'a' => 1,
'b' => array('d' => 3, 'e' => 4, 'f' => 5),
'c' => 2
);
$rows = new ArrayIterator($rows);
foreach ($rows as $key => $row) {
if (is_array($row)) {
foreach ($row as $key => $c) {
$rows[$key] = $c;
}
// skip this
continue;
}
echo $key, " ", $row, "\n";
}
这个打印:
a 1
c 2
d 3
e 4
f 5
Demo.
除了基本参数参考之外,PHP 站点上没有关于 ArrayIterator
对象的文档,所以我什至不确定这是否可行。
我从基本意义上理解了 ArrayIterator
的概念,就像这个例子:
$rows = new ArrayIterator(array('a', 'b', 'c'));
foreach ($rows as $row) {
echo "<p>This is row {$a}.</p>";
}
在我的例子中,行数组有点复杂(尽管为了这个例子仍然被简化了)...
$rows = array(
'a' => NULL,
'b' => array('d' => NULL, 'e' => NULL, 'f' => NULL),
'c' => NULL
);
$rows = new ArrayIterator($rows);
这个想法是 'b'
在这种情况下,有许多子元素应该被解析,就好像它们是父元素一样,在最后(不是需要按顺序处理)其余父元素(a、b、c)。
通常我会使用...
foreach ($child as $c) {
$rows->append($c);
}
但在这种情况下,$child
是一个包含我要维护的键的数组...
foreach ($child as $key => $c) {
$rows->append($c); // but what about $key???
}
我不想在末尾添加数组作为元素,我想添加 key 和 value到父列表,所以我们最终会得到....
$rows = array(
'a' => ...,
'b' => ...,
'c' => ...,
'd' => ...,
'e' => ...,
'f' => ...
);
问题:是否可以从一个 foreach 循环 和 一个键将一个元素追加到当前迭代数组?
ArrayIterator
实现了 ArrayAccess
接口。也就是说offsetset
可用,可以给指定的offset赋值
如 foreach 文档所述:
In order to be able to directly modify array elements within the loop precede $value with &. In that case the value will be assigned by reference.
但在这种情况下不需要。
$rows = array(
'a' => 1,
'b' => array('d' => 3, 'e' => 4, 'f' => 5),
'c' => 2
);
$rows = new ArrayIterator($rows);
foreach ($rows as $key => $row) {
if (is_array($row)) {
foreach ($row as $key => $c) {
$rows[$key] = $c;
}
// skip this
continue;
}
echo $key, " ", $row, "\n";
}
这个打印:
a 1
c 2
d 3
e 4
f 5
Demo.