3v4l.org

run code in 300+ PHP versions simultaneously
<?php $letters = ['A' => 8, 'B' => 16, 'C' => 15, 'D' => 4, 'E' => 1]; var_export( randomPairs($letters) ); function randomPairs(array $letters): array { $result['paired'] = []; while (count($letters) > 1) { $keys = array_rand($letters, 2); shuffle($keys); $result['paired'][] = $keys[0] . $keys[1]; --$letters[$keys[0]]; --$letters[$keys[1]]; $letters = array_filter($letters); } $result['unpaired'] = $letters; return $result; }

preferences:
30.85 ms | 402 KiB | 5 Q