рд╣реЗрд▓реЛ, рд╣реЗрдмреНрд░! рдпрд╣ рд▓реЗрдЦ Standard PHP рд▓рд╛рдЗрдмреНрд░реЗрд░реА (SPL) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдЕрднреА рднреА рдХреЛрдИ рд╕рдордЭрджрд╛рд░ рдореИрдиреБрдЕрд▓ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА PHP рдХреЛрд░ (5.3 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╕реЗ) рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕, рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдХрдХреНрд╖рд╛рдПрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЖрдк рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдРрд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реВрдВред рдореИрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рднреА рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдФрд░ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░реВрдВрдЧрд╛ред
So. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
php.net/manual/en/book.spl.phpрдПрд╕рдкреАрдПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- SplDoublyLinkedList - рджреЛрдЧреБрдиреА рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА
- рд╕реНрдкреНрд▓рд┐рдЯрдХ - рд╕реНрдЯреИрдХ
- SplQueue - рдХрддрд╛рд░
- рд╕реНрдкреНрд▓реЗрд╣реЗрдк - рдвреЗрд░
- SplMaxHeap - рдХреНрд░рдордмрджреНрдз рд╣реАрдк рдЕрд╡рд░реЛрд╣реА
- SplMinHeap - рд╕реЙрд░реНрдЯ рд╣реАрдк рдЖрд░реЛрд╣реА
- SplPriorityQueue - рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░
- SplFixedArray - рд╕реАрдорд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рдРрд░реЗ
- SplObjectStorage - рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрдЧреНрд░рд╣рдг
рдХреНрд░рдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
SplDoublyLinkedList
рдПрдХ рджреЛрд╣рд░реА рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд╕реВрдЪреА (DLL) рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмреАрдЪ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЬреБрдбрд╝реЗ рдиреЛрдбреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╕реВрдЪреА рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рджреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИрдВ - рдПрдлрдЖрдИрдПрдлрдУ (рдлрд░реНрд╕реНрдЯ рдЗрди рдлрд░реНрд╕реНрдЯ рдЖрдЙрдЯ - рдкрд╣рд▓реЗ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдкрд╣рд▓рд╛ рдмрд╛рдПрдВ) рдФрд░ рдПрд▓рдЖрдИрдПрдлрдУ (рд▓рд╛рд╕реНрдЯ рдЗрди рдлрд░реНрд╕реНрдЯ рдЖрдЙрдЯ - рдЕрдВрддрд┐рдо рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдкрд╣рд▓рд╛ рдмрд╛рдПрдВ)ред SplDoublyLinkedList рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рд╕рд┐рджреНрдзрд╛рдВрдд рджреНрд╡рд╛рд░рд╛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд╕реНрдЯреИрдХ рдпрд╛ рдХрддрд╛рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
SplStack
рдпрд╣ рд╡рд░реНрдЧ SplDoublyLinkedList рдХрд╛ рд╡рдВрд╢рдЬ рд╣реИ рдФрд░ рдПрдХ рдвреЗрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
$stack = new SplStack();
рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЕрд░реНрдерд╛рддреН, рд╣рдордиреЗ array_push рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ - рд╕рд░рдгреА рдХреЗ рдЕрдВрдд рдореЗрдВ рддрддреНрд╡ рдЬреЛрдбрд╝рдиреЗ рдФрд░ array_pop - рдЕрдВрддрд┐рдо рддрддреНрд╡ рдирд┐рдХрд╛рд▓рдиреЗред рдЕрдм рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рджреЛ рддрд░реАрдХреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдкрд░реАрдХреНрд╖рдг рдХреА рд╕реНрдерд┐рддрд┐: PHP 5.3.18, рдХреЛрд░ 2 рдбреБрдУ P7350, рд╡рд┐рдВрдбреЛрдЬред рд╕реНрдЯреИрдХ рдкрд░ 1 рд╕реЗ n рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕реНрдЯреИрдХ рд╕реЗ рд╕рдм рдХреБрдЫ рдирд┐рдХрд╛рд▓реЗрдВред
рдкреБрд╢ рдФрд░ рдкреЙрдк рдХреА рд╕рдВрдЦреНрдпрд╛ | рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ | SplStack рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ | рд░рд╡реИрдпрд╛ |
---|
1000 | 0.007686 | 0.008559 | 0.898002 |
100000 | 0.793184 | 0.884979 | .реореп,ремреи,ренрек,рейренрел |
рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдиреЗ рд▓рдЧрднрдЧ 10-15% рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред
рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ PHP 5.4.8 рдореЗрдВ рдПрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛
рдкреБрд╢ рдФрд░ рдкреЙрдк рдХреА рд╕рдВрдЦреНрдпрд╛ | рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ | SplStack рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ | рд░рд╡реИрдпрд╛ |
---|
1000 | 0.008186 | 0.008735 | .репрей,ренрез,рекреп,рейрепреп |
100000 | 0.732347 | 0.771456 | .репрек,репрей,режрек,репрелрез |
рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рд╕реЗ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ PHP 5.4.8 PHP 5.3.18 рд╕реЗ рддреЗрдЬ рд╣реИ рдЬрдм рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ 10% рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рднреА рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ PHP рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд╕рднреА рдмрд╛рдж рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░реВрдВрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реНрдЯреИрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╣реИред
рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рд╣рдордиреЗ рд╕реНрдЯреИрдХ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛:
$obj = array("10", "20", "qwerty", "100", array("one", "two", array("100") ) );
рдкреБрд╢ рдФрд░ рдкреЙрдк рдХреА рд╕рдВрдЦреНрдпрд╛ | рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ | SplStack рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ | рд░рд╡реИрдпрд╛ |
---|
1000 | 0.007974 | 0.008301 | .репрем,режрем,режрен,резрелрем |
100000 | 0.818596 | 0.826363 | .репреп,режрем,режреж,репреорей |
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рдорд╛рдирдиреЗ рдХреА рд╣рд┐рдореНрдордд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдПрд╕рдкреАрдПрд▓ рд╕реЗ рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рд╣реЛрдЧрд╛ред
SplQueue
рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрддрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рд╕реНрдЯреИрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдмрд╕ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
$queue = new SplQueue(); $queue->setIteratorMode(SplQueue::IT_MODE_DELETE); $queue->enqueue('one'); $queue->enqueue('two'); $queue->enqueue('qwerty'); $queue->dequeue(); $queue->dequeue(); echo $queue->top();
SplHeap
рд╣реАрдкреНрд╕ рдкреЗрдбрд╝ рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ: рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдЕрдкрдиреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ, рдЬрдмрдХрд┐ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рддреБрд▓рдирд╛ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реЗ рдвреЗрд░ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реИред рд╕реНрдкреНрд▓реЗрдк рд╣реАрдк рдХреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ рд╣реИред
SplMaxHeap рдФрд░ SplMinHeap
рджреЛ рд╡рд░реНрдЧреЛрдВ SplHeap рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИрдВ: SplMaxHeap - рдЕрдкрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдХреЛ рдЫрд╛рдБрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, SplMinHeap - рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдЫрд╛рдБрдЯрдиреЗ рдХреЗ рд▓рд┐рдПред
$heap = new SplMaxHeap(); $heap->insert('111'); $heap->insert('666'); $heap->insert('777'); echo $heap->extract();
SplPriorityQueue
рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрд░рдордмрджреНрдзрддрд╛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИред
$queue = new SplPriorityQueue(); $queue->setExtractFlags(SplPriorityQueue::EXTR_DATA);
SplFixedArray
рд╕рдВрд░рдЪрдирд╛ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рд╣реИред SplFixedArray рдПрдХ рд╕рддрдд рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдирд┐рдпрдорд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЖрджреЗрд╢рд┐рдд рд╣реИрд╢ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд░рдгреА рдирд┐рдпрдорд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕реАрдорд╛рдПрдВ рд╣реИрдВ:
- рдХреЗрд╡рд▓ рдкреВрд░реНрдгрд╛рдВрдХ> 0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рд▓рдВрдмрд╛рдИ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИ
рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдЧрд┐рдиреЗ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ:
$a = new SplFixedArray(10000); $count = 100000; for($i =0; $i<$count; $i++) { $a[$i] = $i; if ($i==9999) $a->setSize(100000); }
рдкреБрд╢ рдФрд░ рдкреЙрдк рдХреА рд╕рдВрдЦреНрдпрд╛ | рдирд┐рдпрдорд┐рдд рд╕рд░рдгреА | SplFixedArray рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ | рд░рд╡реИрдпрд╛ |
---|
100 | 8.2 x 10E-5 | 6.3 x 10E-5 | рез.рейреж,резрел,реорен,рейрежрез |
10000 | 0.004953 | 0.003983 | рез.реирек,рейрел,рейрел,режреирек |
100000 | 0.053586 | 0.0385701 | рез.рейрео,репрей,резрек,релреирез |
1000000 | 0.533003 | 0.384391 | рез.рейрео,ремрем,резрем,ренрелреи |
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ рдХрд┐рд╕реА рднреА рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде, SplFixedArray рд╕реБрд░рд╛рдЧред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЧрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓рд╛рдн рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: (рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЖрдХрд╛рд░ 10,000 рддрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ 100,000 рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реБрдЖ):
рдкреБрд╢ рдФрд░ рдкреЙрдк рдХреА рд╕рдВрдЦреНрдпрд╛ | рдирд┐рдпрдорд┐рдд рд╕рд░рдгреА | SplFixedArray рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ | рд░рд╡реИрдпрд╛ |
---|
1000000 | 0.051937 | 0.049462 | рез.режрел,режреж,рейрео,рекрезрей |
SplObjectStorage
рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рднрдВрдбрд╛рд░ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрдиреБрдЕрд▓ рд╕реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
$s = new SplObjectStorage();
рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:
$s = new SplObjectStorage(); $o1 = (object)array('a'=>1); $o2 = (object)array('b'=>2); $o3 = (object)array('c'=>3); $s[$o1] = "data for object 1"; $s[$o2] = array(1,2,3); foreach($s as $i => $key) { echo "Entry $i:\n";
рдкрд░рд┐рдгрд╛рдо:
Entry 0: object(stdClass)
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдПрд╕рдкреАрдПрд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХреАред рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдПрдХ рд╕реНрдЯреИрдХ, рдХрддрд╛рд░ рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрдм рд╣рдо SplFixedArray рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд░рдгреА рд╕реЗ рддреЗрдЬ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ, рдЗрдВрдЯрд░рдлреЗрд╕, рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдВрдЧреЗред