【问题标题】:PHP Echo array outside functionPHP Echo 数组外部函数
【发布时间】:2011-08-02 15:09:49
【问题描述】:

我很想知道如何在函数外部回显一个数组,例如,这段代码在其中打印它。但是如果我只是想返回值并在外面回显呢?

function myArray() {
    $arr = array('One', 'Two', 'Three', 'four');

    for ($i = 0; $i < count($arr); $i++) {
        echo $arr[$i];
    }
}

myArray();

希望这是有道理的。

【问题讨论】:

    标签: php arrays function


    【解决方案1】:

    所以,并不是您想在循环外 echo(),而是您希望数组中的值可以访问。

    使用 array() 函数(实际上是一个language construct)并只提供值,PHP 将为您“键入”数组。这些键从 0 开始,可以用方括号访问,如下所示:

    $myArray = array("first", "second", "third");
    echo $myArray[0]; // will echo "first"
    echo $myArray[1]; // will echo "second"
    

    如果您希望在函数中构建数组,那么您需要了解作用域。函数内设置的变量不能在函数外访问。为了实现这一点,您需要返回数组并捕获该函数调用的返回:

    function myArray() {
      return array("first", "second", "third");
    }
    
    // capture the return value of the myArray() function
    $arrayToEcho = myArray();
    
    echo $arrayToEcho[0]; // will echo "first"
    

    【讨论】:

    • 谢谢,我想你明白我的问题了。这是关于希望数组可以在函数外部而不是内部访问。由于我正在进入 OOP,如果我愿意,我希望能够从 class.lib 文件外部引用该数组。
    • 你会想阅读scope,但本质上,这个想法是函数有自己的范围,并且在函数执行后,在其中创建的所有变量都不再可访问。为此,您必须将所需的变量或(如 holodoc 所述)返回到 pass by reference
    • 但是如果我将它设置为公共变量,那么我可以在函数之外访问它,这就是我的计划。
    【解决方案2】:

    因为我喜欢array_walk,另一种解决方案,

    $arr = array('One', 'Two', 'Three', 'four');
    array_walk($arr, 'echo_it');
    
    function echo_it($item) {
        echo "$item ";
    }
    

    但不像printing那么简单

    print_r(array('One', 'Two', 'Three', 'four'));
    

    implode

    echo implode(", ", array('One', 'Two', 'Three', 'four'));
    

    以上所有内容都将以一种或另一种形式echo 数组内容。这取决于你想要什么样的输出,例如逗号分隔,或者作为一个列表......

    【讨论】:

      【解决方案3】:

      只返回创建的数组

      <?php
        function myArray()
        {
            return array('One', 'Two', 'Three', 'four');
        }
      
        $arr = myArray();
        echo $arr[1];
      ?>
      

      【讨论】:

      • 为什么这么复杂? return array('One', 'Two', 'Three', 'four'); 会做同样的事情。
      【解决方案4】:

      我不确定你在问什么,我认为你的意思是 $arr 在 myArray 中声明它是一个局部变量,但是你想在 myArray 函数之外使用它,要做到这一点,你会返回是这样的:

      function myArray() {
          return array('One', 'Two', 'Three', 'four');
      }
      
      $array = myArray();
      
      for ($i = 0; $i < count($array); $i++) {
          echo $array[$i];
      }
      

      print_r(myArray());
      

      【讨论】:

        【解决方案5】:

        我不完全确定您的要求。您可以使用 print_r 或 var_dump 打印数组,但这通常仅用于调试目的。您还可以创建一个这样的函数,允许您将数组作为参数传递给打印。

        function printArray($printArr) {
            $output = "";
            for($i=0; $i < count($printArr); $i++) {
                $output .= $printArr[$i];
            }
            echo $output;
        }
        
        $arr = array('One', 'Two', 'Three', 'four');
        printArray($arr);
        

        【讨论】:

          【解决方案6】:
          function myArray() {
              $arr = array('One', 'Two', 'Three', 'four');
          
              // Here goes whatever you do with $arr
          
              return $arr;
          }
          
          $arr = myArray();
          echo $arr[0];
          

          但是,在函数内部引入硬编码值并不总是一个好主意,这就是为什么您可以使用替代方法并在 myArray() 函数之外创建原始数组 ($arr),然后通过引用将其传递给功能。

          这样,您在函数内部所做的所有影响$arr 的操作都将在myArray() 函数外部可见。

          Passing by reference

          $arr = array('One', 'Two', 'Three', 'four');
          
          function myArray(&$arr) { // Note the ampersand sign (&)!
              // Whatever you do with the original array
              $arr[] = 'Five';
          }
          
          myArray($arr);
          echo $arr[4]; // Will echo "Five"...
          

          【讨论】:

            【解决方案7】:

            试试这个:

            function myArray() {
            
                $arr = array('One', 'Two', 'Three', 'four');
                $output = "";
                for($i=0; $i < count($arr); $i++) {
                    $output .= $arr[$i] . "<br />";
                }
                return $output;
            }
            
            $theValuesIWant = myArray();
            echo $theValuesIWant ;
            

            【讨论】:

            • 这实际上并没有回应它。它只创建一个 stringofarrayvalueslikethis 并且可能不应该命名为 $array
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-07-14
            • 1970-01-01
            • 1970-01-01
            • 2018-07-15
            • 2018-08-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多