如何使用array_walk_recursive取消设置元素

som*_*ude 1 php arrays recursion multidimensional-array

我需要从嵌套到另一个数组的数组中取消设置元素,只N保留第一个元素(N预定义).只有具有数字索引的元素才会受到影响.

输入数组:

Array
(
    [0] => Array (
        [a] => 'w'
        [b] => Array (
             [0]=> 'x'
             [1]=> 'x'
             [2]=> 'x'
        )
    )               
    [1] => Array (
        [a] => 'y'
    )
    [2] => Array (
        [0] => 'z'
        [1] => 'z'
        [2] => 'z'
    )
)
Run Code Online (Sandbox Code Playgroud)

期望的输出(带N=2):

Array
(
    [0] => Array (
        [a] => 'w'
        [b] => Array (
             [0]=> 'x'
             [1]=> 'x'
        )
    )               
    [1] => Array (
        [a] => 'y'
    )
)
Run Code Online (Sandbox Code Playgroud)

基于上面的定义,只有因为它们有一个数字索引而且因为它们都重写了各自数组的第三个元素[0][b][2][2]没有设置.

Hea*_*ota 5

没有经过测试,但这样的事情可能有用.

function myFunc(&$array){
foreach($array as $key=>&$value){
 if(is_array($value)){
   myFunc($value);
 }
 if(is_numeric($key) && $key > 1){
   unset($array[$key]);
 }
}
}
Run Code Online (Sandbox Code Playgroud)

关于array_walk.php.net说:

程序员无法添加,取消设置或重新排序元素.如果回调不符合此要求,则此函数的行为未定义且不可预测.