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

Php 如何将数组传递到函数中,并使用数组返回结果,php,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

所以我试图学习如何通过函数传递数组,这样我就可以绕过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];

澄清一下:我希望能够将多个变量传递到一个函数中,做一些事情,然后返回多个变量,同时保持它们分开。这只是一个例子,我试图解决无法从数组返回多个变量的问题,因为您正在通过复制将数组传递到函数中。在PHP中,只有对象通过引用传递,数组不是对象。下面是您要做的(注意&)

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

试试看

$waffles = foo($waffles);
或者像其他答案中建议的那样,通过引用传递数组

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

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


另请注意,如果要对数组中的所有值求和,请使用看上去像是在寻找通过引用传递的值,这样做会使函数看起来像这样(请注意符号和):

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

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

$waffles = foo($waffles)

我知道上课有点过分

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();
class-Foo
{
私有$sum=NULL;
公共函数构造($array)
{
$this->sum[]=$array;
退还$this;
}
公共函数getSum()
{
$sum=$this->sum;
对于($i=0;$igetSum();

在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];

我总是通过组合使用
list()
array()
s来返回多个值:

您可以随意命名它们。我选择保持函数变量和返回变量的一致性,但您可以随意调用它们


有关更多信息,请参阅。

以下是我的操作方法。通过这种方式,我实际上可以获得一个模拟返回多个值的函数

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

函数返回多个变量:

下面是对函数的一个示例调用。因此,如果我们需要从members表中获取$User_id=12345的用户数据,请输入id、LOGIN、PASSWORD和EMAIL字段:

$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>";
上述调用将以变量名的形式返回所有字段。

另一种方法是:

function foo(Array $array)
{
     return $array;
}
$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));

顺便说一句,之所以它的间隔很有趣,是因为这是我防止它将所有内容聚集在一行的唯一方法:-/您可以使用编辑器上的“代码”按钮。尝试使用“代码示例”按钮…它上面有一堆0和1…就像代码一样;)我想是的。可能是我的错为了子孙后代,我试图通过使用函数来改变数组。当时我很难理解的不是通过引用传递,而是函数返回值的意义,以及返回值的情况。我想nt为了能够将多个变量传递到一个函数中,做一些事情,然后返回多个变量,同时保持它们分开。这只是一个我尝试工作的例子为什么
foo()
被称为
giveme()
?我如何使用这个:函数foo($minheight='Hello World'){echo“高度为:$minheight
”;$minheight[3]=$minheight[0]+$minheight[1]+$minheight[2];返回$minheight;}$setHeight=foo($setHeight);
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>";
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);
        }
    }
}
$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));
function foo(Array $array)
{
     return $array;
}
$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));