<?php /** * @template TKey of array-key * @template TValue */ class Collection { /** * @var array<TKey, TValue> */ protected $items = []; /** * @param array<TKey, TValue> $items * @return void */ public function __construct($items = []) { $this->items = $items; } /** * @param TValue|array-key $key * @return bool */ public function containsStrict_foreach($key) { foreach ($this->items as $item) { if ($item === $key) { return true; } } return false; } /** * @param TValue|array-key $key * @return bool */ public function containsStrict_in_array($key) { return in_array($key, $this->items, true); } } /** * @template TValue * @param array<array-key, TValue> $items * @return array{int, int} */ function bench($items): array { $value = $items[count($items) / 2]; $collection = new Collection($items); $prev = hrtime(true); $collection->containsStrict_foreach($value); $foreach = hrtime(true) - $prev; $collection = new Collection($items); $prev = hrtime(true); $collection->containsStrict_in_array($value); $inArray = hrtime(true) - $prev; return [$foreach, $inArray]; } $fmt = "%5s | %-13.13s | %24s | %25s\n"; printf($fmt, 'n', 'name', 'containsStrict (foreach)', 'containsStrict (in_array)'); foreach ([100, 1000, 10000] as $n) { printf($fmt, $n, "serial int", ...bench(range(1, $n))); printf($fmt, $n, "random int", ...bench(array_map(fn () => random_int(1, $n), range(1, $n)))); printf($fmt, $n, "uniqid string", ...bench(array_map(fn () => uniqid(), range(1, $n)))); }
You have javascript disabled. You will not be able to edit any code.