2014-02-28 56 views
30

我知道,在Python和其他語言中,我們可以訪問元組以更好地促進數據的語義結構或其他語言。PHP中是否有元組?

我的問題是:PHP是否有元組?

如果不是,最近的設施是什麼?

回答

21

PHP的唯一真正構建在數據結構中的人們用於一切的就是數組。

PHP中的數組都是散列表,可以有數字或字符串索引,可以包含任何東西(通常是更多的數組)。

有幾個像元組一樣工作的數組結構。

http://us1.php.net/manual/en/language.types.array.php

http://us1.php.net/list

列表是從函數返回多個值非常方便。在PHP

+1

是的,數組基本上是元組。你甚至可以使用'list($ var1,$ var2)= $ someArray;'這將初始化$ var1和$ var2 – Daniel

+1

我想這就是它:)謝謝。 – brian

23

陣列可用於非常像一個元組:

// one dimensional mixed data 
$x = array(1, 2, "hello"); 

// multidimensional third element 
$y = array(1, 2, array(3, 4, 5)); 

// assigning to variables (list unpacking) 
list($a, $b, $c) = $x; //$a is 1, $b is 2, $c is "hello" 

唯一的問題不同的是,你怎麼也得保持一遍又一遍打字array。不如元組漂亮。

更新 - 自PHP 5.4起,您可以將array()替換爲方括號[]。以上的例子可以看看現在這個樣子:

// one dimensional mixed data 
$x = [1, 2, "hello"]; 

// multidimensional third element 
$y = [1, 2, [3, 4, 5]]; 
+12

不符合「[]」的新PHP語法 – CMCDragonkai

3

https://coderwall.com/p/bah4oq

function foo() 
{ 
    return array('foo', 'bar'); 
} 

list($a, $b) = foo(); 

可以傳遞對象的數組中使用就像一個元組。您還可以一次存儲數組中的異構類型,這非常類似於元組的功能。

1

以前的答案是正確的,因爲您可以模擬PHP數組的元組,但僅限於有限的意義,並非所有用例。當你想使用元組作爲地圖的關鍵字時,這很明顯。例如。實現狀態機的時候,你的轉換表的鍵是元組:

(currState, Event) -> newState 

如果我們在PHP適當的元組的支持,我們可以做這樣的事情:

$trTable = [ 
    ['currState', 'fooEvent'] => 'fooState', 
    ['currState', 'barEvent'] => 'barState', 
    ... 
]; 

相反,我們必須進行模擬像這樣:

$trTable = [ 
    'currState' => [ 
     'fooEvent' => 'fooState', 
     'barEvent' => 'barState', 
    ], 
    ... 
]; 

兩者都達到相同的結果,但第一個有明確的語義。

相關問題