3v4l.org

run code in 300+ PHP versions simultaneously
<?php function find_pairs($array) { // re-index to 0 $array = array_values($array['parent_id']); // sort so the longest arrays are first usort($array, function ($a, $b) { return count($b) - count($a); }); // output array $pairs = array(); $c = count($array); $i = 0; // loop while there are enough values to pair (2 or more) while (array_reduce($array, function ($c, $v) { return $c + count($v); }, 0) > 1) { // make sure there are some elements in this array while (!count($array[$i])) $i = ($i + 1) % $c; // find the next array with a value $j = ($i + 1) % $c; while (!count($array[$j])) $j = ($j + 1) % $c; // have we come full circle? if ($j == $i) break; // save the pair $pairs[] = array(array_shift($array[$i]), array_shift($array[$j])); // move on to the next array $i = ($i + 1) % $c; } return $pairs; } $array = array ('parent_id' => array([1])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1], [3])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1], [3], [5])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1], [3], [5], [7])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1, 2])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1, 2], [3])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1, 2], [3], [5])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1, 2], [3], [5], [7])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1, 2], [3, 4])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1, 2], [3, 4], [5])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1, 2], [3, 4], [5], [7])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1, 2], [3, 4], [5, 6])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1, 2], [3, 4], [5, 6], [7])); print_r(find_pairs($array)); $array = array ('parent_id' => array([1, 2], [3, 4], [5, 6], [7, 8])); print_r(find_pairs($array));

preferences:
25.64 ms | 408 KiB | 5 Q