从一个函数返回两个值

37

在调用一个输出值的函数时,是否可以返回两个值?

例如,我有以下代码:

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

        return $uid;
        return $sid;
    }

    echo ids();
?>

这段代码将输出1。我想选择输出什么,例如ids($sid),但它仍然会输出1

这是否可能?


这个页面应该更新为PHP 7.1,包括解构赋值(尽管那个问题有歧义)。 - Peter Mortensen
7个回答

74

您只能返回一个值。但是您可以使用包含其他两个值的数组

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

2
@YouBook:你需要改变处理返回值的方式。 - Gumbo
1
啊,我的错,没有看到你的编辑。不管怎样,回答很棒。:) 等着我能接受这个答案 - MacMac
6
@YouBook,请查看我下面的回答中的“列表”。这是一个非常方便的功能。 - webbiedave

25

如果需要返回多个值,请返回一个数组或对象。例如:

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

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

// or:
list($id, $username) = foo();

2
在编程中,暗示对象作为替代方案并添加语义含义是一个好的选择。然而,在时间紧迫的情况下,数组可能会稍微快一点(如果不确定,请进行基准测试以确保)。 - Arc

23

您可以使用数组和list函数轻松获取信息:

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

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

我希望这能对你有所帮助

Jerome


这个应该是被接受的答案,因为你返回了多个变量,可以直接访问它们而不需要“访问”数组。 - Sw0ut

6
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 />';

5

许多可能性:

// 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 Martins

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

然后像这样访问它:

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

extract 函数会创建 uid 和 sid 变量。因此,您可以使用 $uid 和 $sid。


这是另一种选择。 - user2029015

2

通过引用传递可以是一种解决方案。

  • 这样你可以像平常一样返回一个值

  • 并修改第二个参数(通过引用传递给函数的那个参数)

一个例子:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接