【问题标题】:Why php function doesn't update array values为什么php函数不更新数组值
【发布时间】:2016-06-22 05:56:57
【问题描述】:

我是 php/programming 的新手,想知道为什么这不能像我认为的那样工作。

我有一个数组,我想用一个函数修改它的一个值。

我一直在阅读并关注一些教程,并认为它与变量范围有关?或者也许这不是处理这种事情的方法,应该使用其他方法?

<?php
$someArray = array("value1"=> 0, "value2" => 0);
function test ($a) {
    if ( 5 > 4 ) {
        $a["value1"] += 1;
        echo $a["value1"] . "<br/>";            
    }
}
test($someArray);
echo $someArray["value1"];
?>

我不明白为什么当我在函数内部回显以获取“value1”的新值时它起作用,但在外部它不起作用。非常感谢任何帮助/指导,如果这太愚蠢或错误,我深表歉意。

【问题讨论】:

    标签: php arrays function


    【解决方案1】:

    您作为数组的副本传递。您应该使用地址传递数组以反映数组内部所做的更改。使用&amp;(作为参考传递):

    $someArray = array("value1"=> 0, "value2" => 0);
    function test (&$a) {   //Use & here
                   ^
        if ( 5 > 4 ) {
            $a["value1"] += 1;
            echo $a["value1"] . "<br/>";            
        }
    }
    test($someArray);
    echo $someArray["value1"];
    

    解释如下:(取自here

    也请阅读SO question


    另一种方法是从函数返回值。在函数内部,使用 return 并在外部捕获它:

    $someArray = array("value1"=> 0, "value2" => 0);
    function test ($a) {
        if ( 5 > 4 ) {
            $a["value1"] += 1;
            echo $a["value1"] . "<br/>";            
        }
        return $a; //Return here
    }
    $someArray = test($someArray);  //Capture here
    echo $someArray["value1"];
    

    【讨论】:

      【解决方案2】:

      试试:

      1) 从函数返回更新后的数组$a

      2) 再次在$someArray 中接收该数组

      $someArray = array("value1"=> 0, "value2" => 0);
      function test ($a) {
          if ( 5 > 4 ) {
              $a["value1"] += 1;
          }
          return $a;
      }
      $someArray = test($someArray);
      echo "Updated ".$someArray["value1"];
      

      【讨论】:

        【解决方案3】:

        您的函数会回显内容,但不会更改或返回值。您想要实现的是更改/更改该值,因此您可以在函数中返回该值而不是回显,并为该值设置一个变量以回显。下面,你可以找到你应该怎么做;

        <?php
        $someArray = array("value1"=> 0, "value2" => 0);
        function test ($a) {
            if ( 5 > 4 ) {
                $a["value1"] += 1;
                return $a["value1"] . "<br/> YEY we did it";            
            }
        }
        echo test($someArray);
        ?>
        

        sandbox这里查看

        【讨论】:

          【解决方案4】:

          使用传递引用

          test(&$someArray); 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-27
            • 1970-01-01
            • 1970-01-01
            • 2016-10-19
            • 2020-09-04
            • 1970-01-01
            相关资源
            最近更新 更多