我在 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;
}
}
不幸的是,當我嘗試這樣做時沒有任何改變,我該怎么做?
uj5u.com熱心網友回復:
如果您想在函式中更改該陣列中的值,則可以通過參考將變數傳遞給函式,以便該函式可以修改該變數。
所以你需要改變這個:
function sizePayRecursive($arr,$size)
對此:
function sizePayRecursive(&$arr, $size)
為了更好地理解它,您可以在php 檔案中閱讀更多關于它的資訊
uj5u.com熱心網友回復:
我希望我正確理解了你的問題。通過在下面的函式中選擇 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
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/470928.html
