1
在PHP中,我應該如何將SplDoublyLinkedList
轉換爲數組?據我所知,沒有方法或類似方法。SplDoublyLinkedList到數組
顯然我可以自己實現這一點,但我預計會有一個有效的提供方法。
在PHP中,我應該如何將SplDoublyLinkedList
轉換爲數組?據我所知,沒有方法或類似方法。SplDoublyLinkedList到數組
顯然我可以自己實現這一點,但我預計會有一個有效的提供方法。
你也許並不需要這樣做:SplDoublyLinkedList
實現Iterator
,ArrayAccess
和Countable
,這意味着你可以把它像幾乎所有的代碼組成的數組。
如果你需要堅持下去,在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列表在此之前。
大概'SplDoublyLinkedList'給了我O(n)數組的訪問權限? – jameshfisher
實際上我不確定,但[正常的數組查找似乎是O(log n)](http://stackoverflow.com/a/2484455/168868),如果它真的對你很重要。注意圖表。對於大多數實際的陣列大小,您不需要擔心性能。不要參與過早的優化,打破xdebug和剖析代碼來證明它是數組訪問會減慢你的代碼。 – Charles