Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- * flatter_test.php
- */
- /**
- * @param string $message
- * @param callable $callback
- */
- function timer(string $message, callable $callback): void
- {
- $start = microtime(true);
- $callback();
- $span = microtime(true) - $start;
- echo "{$message} -> {$span} sec\n";
- }
- $size = 100000;
- $source = [];
- for ($i = 0; $i < $size; $i++) {
- $source[] = [0,1,2,3=>[4,5,6=>[7,8,9=>10,11,12=>[13,14,15=>[16,17,false,[null]]]]]];
- }
- /*
- * Recursive function
- */
- function flatterFunction(array $source, array &$effected): void
- {
- foreach ($source as $v) {
- if (is_array($v)) {
- flatterFunction($v, $effected);
- } else {
- $effected[] = $v;
- }
- }
- }
- timer('Recursive Function', function () use ($source) {
- $effected = [];
- flatterFunction($source, $effected);
- //echo var_export($effected, true) . PHP_EOL;
- });
- /*
- * Recursive Iterator
- */
- timer('Recursive Iterator', function () use ($source) {
- $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($source));
- $effected = [];
- foreach ($iterator as $v) {
- $effected[] = $v;
- }
- //echo var_export($effected, true) . PHP_EOL;
- });
- /*
- * Recursive Closure
- */
- timer('Recursive Closure', function () use ($source) {
- $effected = [];
- array_walk_recursive($source, function($v) use (&$effected) { $effected[] = $v; });
- //echo var_export($effected, true) . PHP_EOL;
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement