Возврат 2 значений из функции [дубликат]

На этот вопрос уже есть ответ здесь:

Многократный возврат из функции 30 ответов

Можно ли вернуть два значения при вызове функции, которая будет выводить значения, например, у меня есть это:

<?php

function ids($uid = 0, $sid = '')
{
    $uid = 1;
    $sid = md5(time());

    return $uid;
    return $sid;    
}

echo ids();

?>

Который будет выводить1Я хочу выбрать, что выводить, например,ids($sid), но он все равно будет выводить1.

Это вообще возможно?

Ответы на вопрос(7)

вернуть значение как обычно

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

Пример:

function foo(&$var) // notice the & in front of the parameter passed
{
    $var++;
    return 1;
}

$a=5;
echo foo($a);
// echoes 1, the returned value
echo $a;
// $a is now 6
return array('uid' => $uid, 'sid' => $sid);

а затем получить к нему доступ, как

$dinga = ids();
extract($dinga);

экстракт сделает переменные uid и sid. Тогда вы можете использовать $ uid и $ sid.

 user202901512 июн. 2013 г., 13:59
это еще одна альтернатива.

Много возможностей:

// return array
function f() {
    return array($uid, $sid);
}
list($uid, $sid) = f();
$uid;
$sid;

// return object
function f() {
    $obj = new stdClass;
    $obj->uid = $uid;
    $obj->sid = $sid;
    return $obj;
}
$obj->uid;
$obj->sid;

// assign by reference
function f(&$uid, &$sid) {
    $uid = '...';
    $sid = '...';
}
f($uid, $sid);
$uid;
$sid;
 Felipe Cardoso Martins28 сент. 2010 г., 19:39
Я думаю лучше назначить по ссылке ... но это может быть опасно!
Решение Вопроса

Вы можете вернуть только одно значение. Но вы можете использоватьмассив это само содержит два других значения:

return array($uid, $sid);

Затем вы получаете доступ к таким значениям, как:

$ids = ids();
echo $ids[0];  // uid
echo $ids[1];  // sid

Вы также можете использовать ассоциативный массив:

return array('uid' => $uid, 'sid' => $sid);

И доступ к нему:

$ids = ids();
echo $ids['uid'];
echo $ids['sid'];
 webbiedave28 сент. 2010 г., 19:13
@YouBook, проверитьlist в моем ответе ниже. Очень удобная функция.
 MacMac28 сент. 2010 г., 19:06
Что бы вывестиArray
 Gumbo28 сент. 2010 г., 19:09
@YouBook: Вам также нужно изменить способ обработки возвращаемого значения.
 MacMac28 сент. 2010 г., 19:11
Ах, моя ошибка, я не читал ваши правки. Во всяком случае, отличный ответ. :)ждет, пока я не смогу принять это

если вам нужно вернуть несколько значений. Например:

function foo() {
    return array(3, 'joe');
}

$data = foo();
$id = $data[0];
$username = $data[1];

// or:
list($id, $username) = foo();
 Archimedix28 сент. 2010 г., 19:17
+1 за намеки на объекты в качестве альтернативы, добавляя семантическое значение. Однако в критических сроках массивы могут быть немного быстрее (если сомневаетесь, просто отметьте эталонный тест).

чтобы легко получить информацию:

function multi($a,$b) {
   return array($a,$b);
}

list($first,$second) = multi(1,2);

Я надеюсь, что это поможет вам

Джером

 Sw0ut20 янв. 2016 г., 09:36
Это должен быть принятый ответ, потому что здесь вы возвращаете несколько переменных и можете напрямую обращаться к ним, не «обращаясь» к массиву.
function ids($uid = 0, $sid = '') 
{ 
    $uid = 1; 
    $sid = md5(time()); 

    return array('uid' => $uid,
                 'sid' => $sid
                );     
} 

$t = ids(); 
echo $t['uid'],'<br />';
echo $t['sid'],'<br />';

Ваш ответ на вопрос