Advertisement
Guest User

Untitled

a guest
Aug 18th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. <?php
  2. /*
  3. * flatter_test.php
  4. */
  5.  
  6. /**
  7. * @param string $message
  8. * @param callable $callback
  9. */
  10. function timer(string $message, callable $callback): void
  11. {
  12. $start = microtime(true);
  13.  
  14. $callback();
  15.  
  16. $span = microtime(true) - $start;
  17. echo "{$message} -> {$span} sec\n";
  18. }
  19.  
  20. $size = 100000;
  21. $source = [];
  22. for ($i = 0; $i < $size; $i++) {
  23. $source[] = [0,1,2,3=>[4,5,6=>[7,8,9=>10,11,12=>[13,14,15=>[16,17,false,[null]]]]]];
  24. }
  25.  
  26. /*
  27. * Recursive function
  28. */
  29. function flatterFunction(array $source, array &$effected): void
  30. {
  31. foreach ($source as $v) {
  32. if (is_array($v)) {
  33. flatterFunction($v, $effected);
  34. } else {
  35. $effected[] = $v;
  36. }
  37. }
  38. }
  39.  
  40. timer('Recursive Function', function () use ($source) {
  41. $effected = [];
  42. flatterFunction($source, $effected);
  43. //echo var_export($effected, true) . PHP_EOL;
  44. });
  45.  
  46. /*
  47. * Recursive Iterator
  48. */
  49. timer('Recursive Iterator', function () use ($source) {
  50. $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($source));
  51. $effected = [];
  52. foreach ($iterator as $v) {
  53. $effected[] = $v;
  54. }
  55. //echo var_export($effected, true) . PHP_EOL;
  56. });
  57.  
  58. /*
  59. * Recursive Closure
  60. */
  61. timer('Recursive Closure', function () use ($source) {
  62. $effected = [];
  63. array_walk_recursive($source, function($v) use (&$effected) { $effected[] = $v; });
  64. //echo var_export($effected, true) . PHP_EOL;
  65. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement