为什么当我想打印它时数组没有更新(print_r)?

时间:2021-05-28 02:42:44

标签: php arrays function

<!DOCTYPE html>
<html>
<body>

<?php
    $array_task=array();
    fillArray($array_task);

     function fillArray($array){
        $array1=array();
        $array2=array();
        for ($i=0;$i<8;$i++){
            $array1[$i]=$i+1;
            $array2[$i]=rand(0,100);
        }
        $array=array_combine($array1,$array2);
        echo"Array before any editions <br>";
        print_r($array);
        echo"<br>Array after adding sum and multiplication <br>";
        addSumMulti($array);
        print_r($array);
        echo"<br>Array after adding last element after each array element <br>";
        #addAfterEach($array);
    }
    
        
    function addSumMulti($array){
        $sum=0;
        $multiplication=1;
        for ($i=1;$i<=10;$i++){
            $sum+=$array[$i];
            if ($i==3 || $i==4){
                $multiplication*=$array[$i];
            }
        }
        $array[9]=$sum;
        $array[10]=$multiplication;   
        print_r($array);
        echo "<br>";
    }
    
?>

</body>
</html>

首先 print_r ($array) 显示 8 个元素,然后在下一个函数中我添加了 2 个元素。而函数 addSumMulti 中的 print_r 显示了 10 个元素,而 fillArray 中的函数 addSumMulti 之后的 print_r 只显示了 8 个元素。出了什么问题,我应该更改什么才能在 addSumMulti(21 行)之后在 print_r 中看到 10 个元素?

2 个答案:

答案 0 :(得分:0)

由于变量范围,您的 $array 尚未更新。

在 fillArray() 中声明的 $array 不能在另一个函数中引用。这样做应该是全局变量。

要么修改函数 addSumMulti 以返回一个数组并在 fillArray 中使用它,要么将 $array 作为全局变量。

选项 1:

function fillArray($array){
    .....
    $arrayAfterSum = addSumMulti($array);
    .....
}

function addSumMulti($array){
    .....
    .....
    return $array;
}

选项 2:

$array = array(); // its a gloabal variable

function fillArray($array){
    global $array; // in order to access global inside function
    .....
    .....
}

function addSumMulti($array){
    global $array; // in order to access global inside function
    .....
    .....
}

答案 1 :(得分:0)

在 PHP 中普通变量是按值传递的*。因此,当您将数组传递给函数时,会创建一个新副本,您的函数代码将对其进行操作。您的函数不返回任何值,因此数组的新值丢失,调用代码只能看到数组的原始副本。

有两种方法可以对原始数组进行更改:

  • 从函数返回一个值。例如:
    function addLine($arr) {
        $arr[] = "Additional Line";
        return $arr
    }
    $arr = ["First line"];
    $arr = addLine($arr);
  • 或通过引用传入变量。例如:
    function addLine(&$arr) {
        $arr[] = "Additional Line";
        return $arr
    }
    $arr = ["First line"];
    addLine($arr);

Variable scopePassing By Reference

*对象总是通过引用传递