3v4l.org

run code in 300+ PHP versions simultaneously
<?php function random_pairs($letters) { $pairs = array(); $letters = array_filter($letters); while (count($letters) > 1) { $keys = array_keys($letters); shuffle($keys); list($letter1, $letter2) = array_slice($keys, 0, 2); $pairs[] = "$letter1$letter2"; $letters[$letter1]--; $letters[$letter2]--; $letters = array_filter($letters); } return array('pairs' => $pairs, 'unpaired' => $letters); } $letters = array('A' => 8, 'B' => 16, 'C' => 15, 'D' => 4, 'E' => 1); print_r(random_pairs($letters));

preferences:
35.87 ms | 402 KiB | 5 Q