w3resource

PHP Exercises: Memoize a given function results in memory

PHP: Exercise-99 with Solution

Write a PHP program to memoize a given function results in memory.

Note: In computing, memoization or memoisation is an optimization technique used primarily to speed up computer programs by storing the results of expensive function calls and returning the cached result when the same inputs occur again.

Sample Solution: -

PHP Code:

<?php
//Licence: https://bit.ly/2CFA5XY
function memoize($func)
{
    return function () use ($func) {
        static $cache = [];

        $args = func_get_args();
        $key = serialize($args);
        $cached = true;

        if (!isset($cache[$key])) {
            $cache[$key] = $func(...$args);
            $cached = false;
        }

        return ['result' => $cache[$key], 'cached' => $cached];
    };
}

$memoizedAdd = memoize(
    function ($num) {
        return $num + 10;
    }
);

var_dump($memoizedAdd(5));  
var_dump($memoizedAdd(6));  
var_dump($memoizedAdd(5));  
?>

Sample Output:

array(2) {
  ["result"]=>
  int(15)
  ["cached"]=>
  bool(false)
}
array(2) {
  ["result"]=>
  int(16)
  ["cached"]=>
  bool(false)
}
array(2) {
  ["result"]=>
  int(15)
  ["cached"]=>
  bool(true)
}

Flowchart:

Flowchart: Memoize a given function results in memory.

PHP Code Editor:

Have another way to solve this solution? Contribute your code (and comments) through Disqus.

Previous:Write a PHP program to create a new function that composes multiple functions into a single callable.
Next: Write a PHP program to curry a function to take arguments in multiple calls.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.

PHP: Tips of the Day

Mutates the original array to filter out the values specified

Example:

<?php
function tips_pull(&$items, ...$params)
{
  $items = array_values(array_diff($items, $params));
  return $items;
}

$items = ['x', 'y', 'z', 'x', 'y', 'z'];
print_r(tips_pull($items, 'y', 'z'));
?>

Output:

Array
(
    [0] => x
    [1] => x
)