在递归函数中更改嵌套数组的值

Changing the value of a nested array inside an recursive function

我在 PHP 中有一个递归函数,它计算数组将占用的总大小(以字节为单位),我还需要检查是否有一些值大于 32766(最大整数),如果因此,它将其值设置为 404

它将接收的数组示例

[[12,123,145],[[12,123321,543],"hello"],1232456]

出于实际原因,我只粘贴了我进行验证的部分功能

function sizePayRecursive($arr,$size){
  foreach ($arr as $key => &$item) {
    if (is_array($item))
    {
      $size = sizePayRecursive($item,$size);
    }
    if (is_int($item))
    {
      if($item > 32766)
      {
        $arr[$key]= 404;
      }
      $size += 2;
    }
}


不幸的是,当我尝试这样做时没有任何改变,我该怎么做?

如果您想在函数中更改该数组内的值,则可以通过引用将变量传递给函数,以便函数可以修改变量。

所以你需要改变这个:

function sizePayRecursive($arr,$size)

对此:

function sizePayRecursive(&$arr, $size)

要更好地理解它,您可以在 php documentation

中阅读更多相关信息

希望我正确理解了你的问题。 通过在下面的函数中选择 string 和 int 来检查它。错误的传递给结果函数。空数组被清除。

<?php 
function sizePayRecursive($arr,$result=[]){
  foreach ($arr as $key => $item) { //recursive
        if (is_array($item)){
            $result[]=sizePayRecursive($item,@$result[$key]);
        }elseif (is_int($item)){ //integer
            if($item > 32766){
                $result[$key]= 404;
            }
        }elseif (is_string($item)){ //string
            if(strlen($item) > 32766){
                $result[$key]= 404;
            }
        }
    }
    return $result;
}
function array_filter_recursive($input){  //delete empty array 
    foreach ($input as $value){ 
        if (is_array($value)){ 
            $value = array_filter_recursive($value); 
        } 
    } 
    return array_filter($input); 
} 

$data=[[12,123,145],[[12,123321,543],"hello"],1232456];
$final=array_filter_recursive(sizePayRecursive($data));
echo '<pre>';
print_r($final);
?>

结果

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [1] => 404
                )

        )

    [2] => 404
)