2010-09-28 42 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