Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- $input = '10 20 100 + - 20 * DUP 10 20 + * =';
- $t = microtime(1);
- for ($i = 0; $i < 10000; $i++) {
- $stack = array();
- foreach (explode(' ', $input) as $chunk) {
- switch ($chunk) {
- case '+':
- array_push($stack, array_pop($stack) + array_pop($stack));
- break;
- case '-':
- array_push($stack, array_pop($stack) - array_pop($stack));
- break;
- case '*':
- array_push($stack, array_pop($stack) * array_pop($stack));
- break;
- case '=':
- array_push($stack, array_pop($stack) === array_pop($stack));
- break;
- case 'DUMP':
- var_dump($stack);
- break;
- case 'DUP':
- array_push($stack, end($stack));
- break;
- default:
- array_push($stack, $chunk);
- }
- }
- }
- function ap(ArrayObject $arr) {
- $last = $arr->count() - 1;
- $item = $arr[$last];
- $arr->offsetUnset($last);
- return $item;
- }
- echo 'Array: ', microtime(1) - $t, "\n";
- $t = microtime(1);
- for ($i = 0; $i < 10000; $i++) {
- $stack = new ArrayObject(array(1,2));
- foreach (explode(' ', $input) as $chunk) {
- switch ($chunk) {
- case '+':
- $stack->append(ap($stack) + ap($stack));
- break;
- case '-':
- $stack->append(ap($stack) - ap($stack));
- break;
- case '*':
- $stack->append(ap($stack) * ap($stack));
- break;
- case '=':
- $stack->append(ap($stack) === ap($stack));
- break;
- case 'DUMP':
- var_dump($stack);
- break;
- case 'DUP':
- $stack->append(end($stack));
- break;
- default:
- $stack->append($chunk);
- }
- }
- }
- echo 'Array Object: ', microtime(1) - $t, "\n";
- $t = microtime(1);
- for ($i = 0; $i < 10000; $i++) {
- $stack = new SplStack();
- foreach (explode(' ', $input) as $chunk) {
- switch ($chunk) {
- case '+':
- $stack->push($stack->pop() + $stack->pop());
- break;
- case '-':
- $stack->push($stack->pop() - $stack->pop());
- break;
- case '*':
- $stack->push($stack->pop() * $stack->pop());
- break;
- case '=':
- $stack->push($stack->pop() === $stack->pop());
- break;
- case 'DUMP':
- var_dump($stack);
- break;
- case 'DUP':
- $stack->push($stack->top());
- break;
- default:
- $stack->push($chunk);
- }
- }
- }
- echo 'SplStack: ', microtime(1) - $t, "\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement