2014-01-29 21 views
1

在PHP中,我應該如何將SplDoublyLinkedList轉換爲數組?據我所知,沒有方法或類似方法。SplDoublyLinkedList到數組

顯然我可以自己實現這一點,但我預計會有一個有效的提供方法。

回答

2

你也許並不需要這樣做:SplDoublyLinkedList實現IteratorArrayAccessCountable,這意味着你可以把它像幾乎所有的代碼組成的數組。

如果你需要堅持下去,在serialize中使用是安全的。不需要實際將其轉換爲陣列,除非您正在調用內置函數,該函數僅在真實陣列上運行

如果絕對必須將其轉化爲一個真正的數組,你可以利用foreach迭代器工作:

$l = new SplDoublyLinkedList(); 
$l->push('a'); 
$l->push('b'); 
$l->push('c'); 
$l->unshift('d'); 
var_dump($l); 
/* 
class SplDoublyLinkedList#1 (2) { 
    private $flags => 
    int(0) 
    private $dllist => 
    array(4) { 
    [0] => 
    string(1) "d" 
    [1] => 
    string(1) "a" 
    [2] => 
    string(1) "b" 
    [3] => 
    string(1) "c" 
    } 
} 
*/ 

$c = array(); 
foreach($l as $k => $v) { $c[$k] = $v; } 
var_dump($c); 
/* 
array(4) { 
    [0] => 
    string(1) "d" 
    [1] => 
    string(1) "a" 
    [2] => 
    string(1) "b" 
    [3] => 
    string(1) "c" 
} 
*/ 

可能需要rewind列表在此之前。

+0

大概'SplDoublyLinkedList'給了我O(n)數組的訪問權限? – jameshfisher

+0

實際上我不確定,但[正常的數組查找似乎是O(log n)](http://stackoverflow.com/a/2484455/168868),如果它真的對你很重要。注意圖表。對於大多數實際的陣列大小,您不需要擔心性能。不要參與過早的優化,打破xdebug和剖析代碼來證明它是數組訪問會減慢你的代碼。 – Charles