2010-09-28 46 views
25

返回2个值是否有可能返回两个值调用,将输出的值,例如,我有这样的一个函数:从功能

<?php 

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

    return $uid; 
    return $sid;  
} 

echo ids(); 

?> 

将输出1,我想选什么输出,例如ids($sid),但仍会输出1

这有可能吗?

回答

55

您只能返回一个值。

return array($uid, $sid); 

那么你访问喜欢的价值观:

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

你也可以使用一个关联数组:

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

但是,这本身就包含着另外两个值,你可以使用一个array并访问它:

$ids = ids(); 
echo $ids['uid']; 
echo $ids['sid']; 
+2

这将输出'阵列' – MacMac 2010-09-28 17:06:50

+2

@YouBook:你需要改变的方式哟你也处理返回值。 – Gumbo 2010-09-28 17:09:34

+1

啊,我的错误,没有读你的编辑。无论如何,很好的答案。 :) *等到我可以接受这个* – MacMac 2010-09-28 17:11:03

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

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

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

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

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

+1用于暗示物体作为替代物,增加语义。但是,在时间紧急的情况下,阵列可能会稍微快一点(如果有疑问,基准确定)。 – Archimedix 2010-09-28 17:17:03

10

你可以使用一个数组和列表功能,以获得轻松的信息:

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

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

我希望这将有助于你

杰罗姆

+0

这应该是被接受的答案,因为在这里你返回几个变量,你可以直接访问它们而不需要“访问”数组。 – Sw0ut 2016-01-20 08:36:27

4

很多可能性:

// 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; 
+0

我认为通过参考更好地分配......但这可能是危险的! – 2010-09-28 17:39:43

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

,然后访问它像

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

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

+0

这是另一种选择。 – user2029015 2013-06-12 11:59:00

2

通过参考将是一个解决方案。 这样你:

  • 返回的值即可正常

  • 和修改第二( - 一个通过REFFERENCE传递给函数)

一个例子:

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