在递归函数中更改嵌套数组的值
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
)
我在 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
)