Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save EnchanterIO/51afd5c816a764daf866227ce84a07b2 to your computer and use it in GitHub Desktop.
Save EnchanterIO/51afd5c816a764daf866227ce84a07b2 to your computer and use it in GitHub Desktop.

Revisions

  1. Lukáš Lukáč renamed this gist Feb 22, 2018. 1 changed file with 0 additions and 0 deletions.
  2. Lukáš Lukáč created this gist Feb 22, 2018.
    60 changes: 60 additions & 0 deletions benchmark_array_merge_vs_foreach_manual_addition
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,60 @@
    <?php

    class Benchmark
    {
    /**
    * @param string $mergeStrategy
    * @param int $arrayToMergeSize
    *
    * @return void
    */
    public function run(string $mergeStrategy, int $arrayToMergeSize): void
    {
    $startMicrotime = microtime(true);

    $mergedArray = [];
    $extraBigArrayToMerge = [];

    for ($i = 0; $i < 1000000; $i++) {
    $mergedArray[] = 'hardcoded:'.$i;
    }

    for ($i = 0; $i < $arrayToMergeSize; $i++) {
    $extraBigArrayToMerge[] = 'extra:'.$i;
    }

    if ($mergeStrategy === 'array_merge') {
    $mergedArray = array_merge($mergedArray, $extraBigArrayToMerge);
    }

    if ($mergeStrategy === 'normal') {
    foreach ($extraBigArrayToMerge as $element) {
    $mergedArray[] = $element;
    }
    }

    $endMicrotime = microtime(true);

    echo sprintf(
    "Merging two arrays using '%s' strategy took %d seconds.\n",
    $mergeStrategy,
    $endMicrotime - $startMicrotime
    );

    echo sprintf(
    "Memory usage is: %d MB.\n",
    memory_get_usage() / 1024 / 1024
    );

    echo sprintf(
    "Memory peak was: %d MB.\n",
    memory_get_peak_usage(true) / 1024 / 1024
    );
    }
    }

    $mergeStrategy = $argv[1];
    $extraBigArraySize = $argv[2];

    $benchmark = new Benchmark();
    $benchmark->run($mergeStrategy, $extraBigArraySize);