<?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