【问题标题】:Why array is not updated when i want to print it out (print_r)?为什么当我想打印它时数组没有更新(print_r)?
【发布时间】:2021-08-16 07:23:27
【问题描述】:
<!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 个元素?

【问题讨论】:

  • 数组是按值传递的。

标签: php arrays function


【解决方案1】:

在 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

*对象总是通过引用传递

【讨论】:

    【解决方案2】:

    由于范围可变,您的 $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
        .....
        .....
    }
    

    【讨论】:

      猜你喜欢
      • 2023-01-12
      • 2021-10-01
      • 2021-08-14
      • 1970-01-01
      • 2022-08-03
      • 2020-10-10
      • 1970-01-01
      • 2021-03-06
      • 2015-06-17
      相关资源
      最近更新 更多