【问题标题】:Returning two values from a function [duplicate]从函数返回两个值[重复]
【发布时间】:2011-04-18 10:21:41
【问题描述】:

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

例如,我有这个:

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

        return $uid;
        return $sid;
    }

    echo ids();
?>

这将输出1。我想选择要输出的内容,例如ids($sid),但仍会输出1

有可能吗?

【问题讨论】:

标签: php function return-value


【解决方案1】:

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

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

【讨论】:

  • @YouBook:你也需要改变处理返回值的方式。
  • 啊,我的错,没有阅读您的编辑。无论如何,很好的答案。 :) 等到我能接受为止
  • @YouBook,请在下面的回答中查看list。非常方便的功能。
【解决方案2】:

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

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

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

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

【讨论】:

  • +1 用于提示对象作为替代方案,添加语义含义。但是,在时间紧迫的情况下,数组可能会稍微快一点(如果有疑问,请进行基准测试以确保)。
【解决方案3】:

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

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

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

希望对你有帮助

杰罗姆

【讨论】:

  • 这应该是公认的答案,因为在这里您返回了几个变量,您可以直接访问它们而无需“访问”数组。
【解决方案4】:
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;
    

    【讨论】:

    • 我认为最好通过引用分配...但这可能是危险的!
    【解决方案6】:

    通过引用传递将是一个解决方案。 这样你:

    • 像往常一样返回一个值

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

    一个例子:

    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
    

    【讨论】:

      【解决方案7】:
      return array('uid' => $uid, 'sid' => $sid);
      

      然后像访问它一样访问它

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

      extract 将使 uid 和 sid 变量。那么你可以使用 $uid 和 $sid。

      【讨论】:

      • 这是另一种选择。
      猜你喜欢
      • 2011-03-09
      • 1970-01-01
      • 2016-03-16
      • 2011-04-19
      • 2016-05-07
      • 1970-01-01
      • 2015-10-31
      相关资源
      最近更新 更多