代码之家  ›  专栏  ›  技术社区  ›  JoeCortopassi Dan

如何将数组传递到函数中,并用数组返回结果

php
  •  18
  • JoeCortopassi Dan  · 技术社区  · 16 年前

    所以我想学习如何通过函数传递数组,这样我就可以绕过PHP无法返回多个值的问题。到目前为止还没有什么工作,但这是我最好的尝试。有人能指出我哪里出错了吗?

    function foo($array)
    {
        $array[3]=$array[0]+$array[1]+$array[2];
        return $array;
    }
    
    $waffles[0]=1;
    $waffles[1]=2;
    $waffles[2]=3;
    foo($waffles);
    
    echo $waffles[3];
    

    澄清:我希望能够将多个变量传递到一个函数中,做一些事情,然后返回多个变量,同时保持它们的分离。这只是一个例子,我试图把它作为一个解决方法,因为不能从数组中返回多个变量。

    9 回复  |  直到 7 年前
        1
  •  33
  •   SoapBox    16 年前

    您似乎在寻找pass-by引用,这样做会使您的函数看起来像这样(注意和号):

    function foo(&$array)
    {
        $array[3]=$array[0]+$array[1]+$array[2];
    }
    

    或者,可以将函数的返回值赋给变量:

    function foo($array)
    {
        $array[3]=$array[0]+$array[1]+$array[2];
        return $array;
    }
    
    $waffles = foo($waffles)
    
        2
  •  10
  •   Tor Valamo    16 年前

    您正在通过复制将数组传递给函数。在PHP中,只有对象是通过引用传递的,数组不是对象。以下是您的工作(请注意&)

    function foo(&$arr) { # note the &
      $arr[3] = $arr[0]+$arr[1]+$arr[2];
    }
    $waffles = array(1,2,3);
    foo($waffles);
    echo $waffles[3]; # prints 6
    

    除此之外,我不知道你为什么要这样做。为什么不返回和而不将其分配给新的数组元素呢?

        3
  •  3
  •   user2587105    11 年前
    function foo(Array $array)
    {
         return $array;
    }
    
        4
  •  2
  •   Gordon Haim Evgi    16 年前

    尝试

    $waffles = foo($waffles);
    

    或者通过引用传递数组,就像其他答案中建议的那样。

    此外,您可以在不写入索引的情况下向数组中添加新元素,例如

    $waffles = array(1,2,3); // filling on initialization
    

    $waffles = array();
    $waffles[] = 1;
    $waffles[] = 2;
    $waffles[] = 3;
    

    在旁注中,如果要对数组中的所有值求和,请使用 array_sum()

        5
  •  2
  •   matpie    16 年前

    我总是通过使用 list() array() S:

    function DecideStuffToReturn() {
        $IsValid = true;
        $AnswerToLife = 42;
    
        // Build the return array.
        return array($IsValid, $AnswerToLife);
    }
    
    // Part out the return array in to multiple variables.
    list($IsValid, $AnswerToLife) = DecideStuffToReturn();
    

    你可以随便给他们取名字。我选择保持函数变量和返回变量的一致性,但是您可以随意调用它们。

    list() 更多信息。

        6
  •  1
  •   streetparade    16 年前

    我知道上课有点过分了

    class Foo
    {
    
     private $sum = NULL;
    
     public function __construct($array)
     {
       $this->sum[] = $array;
       return $this;
     }
    
     public function getSum()
     {
       $sum = $this->sum;
       for($i=0;$i<count($sum);$i++)
       {
          // get the last array index
          $res[$i] = $sum[$i] + $sum[count($sum)-$i];
       }
       return $res;
     }
    
    
    }
    
    
    $fo = new Foo($myarray)->getSum();
    
        7
  •  1
  •   Gautam Sharma    13 年前

    我就是这样做的。这样我就可以得到一个函数来模拟返回的多个值;

    function foo($array) 
    { 
        foreach($array as $_key => $_value) 
        {
           $str .= "{$_key}=".$_value.'&';
        }
        return $str = substr($str, 0, -1);
    } 
    
    /* Set the variables to pass to function, in an Array */
    
        $waffles['variable1'] = "value1"; 
        $waffles['variable2'] = "value2"; 
        $waffles['variable3'] = "value3"; 
    
    /* Call Function */
    
        parse_str( foo( $waffles ));
    
    /* Function returns multiple variable/value pairs */
    
        echo $variable1 ."<br>";
        echo $variable2 ."<br>";
        echo $variable3 ."<br>";
    

    例如,如果你愿意,尤其有用 数据库中的所有字段 作为变量返回,与数据库表同名 领域 . 看 dBiField:() '下面的函数 .

    例如,如果您有一个查询

    select login, password, email from members_table where id = $id

    函数返回多个变量:

    $login, $password and $email

    功能如下:

    function db_fields($field, $filter, $filter_by,  $table = 'members_table') {
    
     /*
        This function will return as variable names, all fields that you request, 
        and the field values assigned to the variables as variable values.  
    
        $filter_by = TABLE FIELD TO FILTER RESULTS BY
        $filter =  VALUE TO FILTER BY
        $table = TABLE TO RUN QUERY AGAINST
    
        Returns single string value or ARRAY, based on whether user requests single
        field or multiple fields.
    
        We return all fields as variable names. If multiple rows
        are returned, check is_array($return_field); If > 0, it contains multiple rows.
        In that case, simply run parse_str($return_value) for each Array Item. 
    */
        $field = ($field == "*") ? "*,*" : $field;
        $fields = explode(",",$field);
    
        $assoc_array = ( count($fields) > 0 ) ? 1 : 0;
    
        if (!$assoc_array) {
            $result = mysql_fetch_assoc(mysql_query("select $field from $table where $filter_by = '$filter'"));
            return ${$field} = $result[$field];
        }
        else
        {
            $query = mysql_query("select $field from $table where $filter_by = '$filter'");
            while ($row = mysql_fetch_assoc($query)) {
                foreach($row as $_key => $_value) {
                    $str .= "{$_key}=".$_value.'&';
                }
                return $str = substr($str, 0, -1);
            }
        }
    }
    

    下面是函数调用示例。因此,如果我们需要从带有字段id、login、password、email的members表中获取$user_id=12345的用户数据:

    $filter = $user_id;
    $filter_by = "ID";
    $table_name = "members_table"
    
    parse_str(db_fields('LOGIN, PASSWORD, EMAIL', $filter, $filter_by, $table_name));
    
    /* This will return the following variables: */
    
    echo $LOGIN ."<br>";
    echo $PASSWORD ."<br>";
    echo $EMAIL ."<br>";
    

    我们也可以这样称呼:

    parse_str(db_fields('*', $filter, $filter_by, $table_name));
    

    上述调用将返回所有字段作为变量名。

        8
  •  1
  •   Sunny    10 年前

    不能在PHP中返回“多个值”。您可以返回单个值,该值可能是一个数组。

    function foo($test1, $test2, $test3)
    {
        return array($test1, $test2, $test3);
    }
    $test1 = "1";
    $test2 = "2";
    $test3 = "3";
    
    $arr = foo($test1, $test2, $test3);
    
    $test1 = $arr[0];
    $test2 = $arr[1];
    $test3 = $arr[2];
    
        9
  •  0
  •   Hello Hack    7 年前

    另一种方法是:

    $NAME = "John";
    $EMAIL = "John@gmail.com";
    $USERNAME = "John123";
    $PASSWORD = "1234";
    $array = Array ("$NAME","$EMAIL","$USERNAME","$PASSWORD");
    function getAndReturn (Array $array){
        return $array;
    }
    print_r(getAndReturn($array));
    
    推荐文章