本文介绍了在array_walk()的回调函数中删除行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用array_walk()函数使用数组:
I'm trying to work with array using array_walk() function such way:
<?php
$array = array('n1' => 'b1', 'n2' => 'b2', 'n3' => 'b3');
array_walk($array, function(&$val, $key) use (&$array){
echo $key."\n";
if ($key == 'n1')
$val = 'changed_b1';
if ($key == 'n2' || $key == 'n3') {
unset($array[$key]);
}
});
print_r($array);
获取:
n1
n2
Array
(
[n1] => changed_b1
[n3] => b3
)
似乎,删除第二个元素之后的情况-第三个元素不会发送到回调函数。
It seems, what after deletion of 2nd element -- 3rd element don't be sended to callback function.
推荐答案
您可以使用辅助数组,该效果将导致那些节点已被删除,例如;
What you can do is use a secondary array, which will give the effect that those nodes have been deleted, like;
<?php
$array = array('n1' => 'b1', 'n2' => 'b2', 'n3' => 'b3');
$arrFinal = array();
array_walk($array, function($val, $key) use (&$array, &$arrFinal){
echo $key."\n";
if ($key == 'n2' || $key == 'n3') {
//Don't do anything
} else {
$arrFinal[$key] = $val;
}
});
print_r($arrFinal);
这篇关于在array_walk()的回调函数中删除行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!