3v4l.org

run code in 300+ PHP versions simultaneously
<?php $pizzas = [ ['cheese', 'tomato', 'ham', 'beef', 'pineapple'], ['bacon', 'ham', 'cheese'], ['cheese', 'tomato', 'bacon', 'chili', 'salad'], ['tomato', 'salad', 'pineapple'], ['tomato', 'beef', 'bacon'], ['cheese', 'tomato', 'bacon', 'chili', 'salad', 'anchovies'], ['tomato', 'pineapple', 'bacon', 'cheese', 'ham'], ]; $included_wish = ['cheese', 'ham', 'bacon']; $excluded_wish = ['pineapple']; $percentages = []; $wishCount = count($included_wish); foreach ($pizzas as $pizza) { if (array_intersect($excluded_wish, $pizza)) { continue; } $result[] = [ 'perc' => count(array_intersect($included_wish, $pizza)) / $wishCount, 'additional' => count(array_diff($pizza, $included_wish)), 'ingredients' => implode(', ', $pizza), ]; } usort($result, fn($a, $b) => [$b['perc'], $a['additional']] <=> [$a['perc'], $b['additional']]); foreach ($result as $row) { vprintf("wished: %.02f%%, surplus toppings: %d : %s\n", $row); }

preferences:
36.19 ms | 408 KiB | 5 Q