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));
Output for 7.1.25 - 7.1.28, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.26, 8.4.1 - 8.4.13
Array ( ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) [1] => Array ( [0] => 5 [1] => 7 ) ) Array ( ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) [1] => Array ( [0] => 5 [1] => 2 ) ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) [1] => Array ( [0] => 5 [1] => 7 ) ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) [1] => Array ( [0] => 4 [1] => 2 ) ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) [1] => Array ( [0] => 4 [1] => 5 ) ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) [1] => Array ( [0] => 4 [1] => 5 ) [2] => Array ( [0] => 7 [1] => 2 ) ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) [1] => Array ( [0] => 4 [1] => 5 ) [2] => Array ( [0] => 6 [1] => 2 ) ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) [1] => Array ( [0] => 4 [1] => 5 ) [2] => Array ( [0] => 6 [1] => 7 ) ) Array ( [0] => Array ( [0] => 1 [1] => 3 ) [1] => Array ( [0] => 4 [1] => 5 ) [2] => Array ( [0] => 6 [1] => 7 ) [3] => Array ( [0] => 8 [1] => 2 ) )

preferences:
156.31 ms | 418 KiB | 5 Q