Подтвердить что ты не робот

Как передать массив в функцию и вернуть результаты с помощью массива

Итак, я пытаюсь научиться передавать массивы через функцию, поэтому я могу обойти невозможность 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];

Для пояснения: я хочу иметь возможность передавать несколько переменных в функцию, делать что-то, а затем возвращать несколько переменных, сохраняя их отдельно. Это был просто пример, который я пытался работать как работа, чтобы не иметь возможности возвращать несколько переменных из массива

4b9b3361

Ответ 1

Кажется, вы ищете pass-by-reference, чтобы сделать так, чтобы ваша функция выглядела так (обратите внимание на амперсанд):

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

Вы передаете массив в функцию путем копирования. Только объекты передаются по ссылке в 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

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

Ответ 4

Try

$waffles = foo($waffles);

Или передайте массив по ссылке, как это предлагается в других ответах.

Кроме того, вы можете добавлять новые элементы в массив без записи индекса, например.

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

или

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

Если вы хотите суммировать все значения в массиве, используйте array_sum()

Ответ 5

Я всегда возвращаю несколько значений, используя комбинацию 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

Я знаю, что класс немного перегружен

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

Вы не можете вернуть "несколько значений" в 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];

Ответ 8

Вот как я это делаю. Таким образом, я могу фактически получить функцию для имитации возврата нескольких значений;

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

Особенно полезно, если вы хотите, например все поля в базе данных для возврата в виде переменных, называемых такими же, как поля таблицы базы данных. См. "Функция db_fields()" ниже.

Например, если у вас есть запрос

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

Ниже приведен пример вызова функции. Итак, если нам нужно получить данные пользователя для say $user_id = 12345, из таблицы участников с идентификаторами полей, 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>";

Мы могли бы также так:

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

Вышеупомянутый вызов возвращает все поля как имена переменных.

Ответ 9

Другой способ это:

$NAME = "John";
$EMAIL = "[email protected]";
$USERNAME = "John123";
$PASSWORD = "1234";
$array = Array ("$NAME","$EMAIL","$USERNAME","$PASSWORD");
function getAndReturn (Array $array){
    return $array;
}
print_r(getAndReturn($array));