如何将数组传递给函数,并使用数组返回结果

时间:2010-01-28 23:40:48

标签: php

所以我正在尝试学习如何通过函数传递数组,这样我就可以解决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 个答案:

答案 0 :(得分:34)

你似乎在寻找传递参考,这样做会使你的函数看起来像这样(注意&符号):

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)

答案 1 :(得分:10)

您正在通过复制将数组传递给函数。只有对象在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

除此之外,我不确定你为什么会那样做那种特殊的操作。为什么不返回总和而不是将其分配给新的数组元素?

答案 2 :(得分:4)

function foo(Array $array)
{
     return $array;
}

答案 3 :(得分:2)

尝试

$waffles = foo($waffles);

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

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

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

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

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

答案 4 :(得分:2)

我总是使用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()

答案 5 :(得分:1)

我知道一个班级有点过分

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();

答案 6 :(得分:1)

您无法在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];

答案 7 :(得分:1)

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

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>";

如果您愿意,尤其有用,例如数据库中的所有字段 作为变量返回,命名与数据库表 fields 相同。 请参阅下面的“ db_fields()”功能。

例如,如果您有查询

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

函数返回多个变量:

members_table

以下是功能:

$login, $password and $email

以下是对函数的示例调用。因此,如果我们需要获取用户数据,例如$ user_id = 12345,请使用包含字段ID,LOGIN,PASSWORD,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);
        }
    }
}

我们也可以这样打电话:

$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>";

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

答案 8 :(得分:1)

另一种方法是:

$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));