本文介绍了在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()的回调函数中删除行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-18 23:17