$a = array(8, 16, 16, 32, 8, 8, 4, 4);
具有上面的数组,有一种方法,因此我可以根据汇总到设定值的值来划分/拆分数组。 例如,如果我希望它们等于32。我的最终数组的值最高为100个值,所有值都是32、16、8或4,我只需要对项目进行分组,以便该值始终等于设定的金额,因此在此示例中,其32。
我希望得到上述阵列:
$a[0][1] = 16
$a[0][2] = 16
$a[1][3] = 32
$a[2][0] = 8
$a[2][4] = 8
$a[2][5] = 8
$a[2][6] = 4
$a[2][7] = 4
AS$ a [0]总和最多32,$ a [1]和$ a [2]。
$a = array(8, 16, 16, 32, 8, 8, 4, 4);
$limit = 32;
rsort($a);
$b = array(array());
$index = 0;
foreach ($a as $i) {
if ($i + array_sum($b[$index]) > $limit) {
$b[++$index] = array();
}
$b[$index][] = $i;
}
$a = $b;
print_r($a);
它会起作用,但这仅仅是因为在您的情况下您有4 | 8 | 16 | 32,只有当需要的总和是最大数字的倍数时(32)。
对您的输入进行测试:
Array
(
[0] => Array
(
[0] => 32
)
[1] => Array
(
[0] => 16
[1] => 16
)
[2] => Array
(
[0] => 8
[1] => 8
[2] => 8
[3] => 4
[4] => 4
)
)