PHP - Разбить массив на РАЗНЫЕ части
Допустим есть массив из 10 элементов. Нужно разбить его на 3 части, но чтобы в одном из полученных массивов элементов было меньше чем в 1 и 2. Т.е. например в первом 4, во втором 2, в третьем 4. Как это можно реализовать? Все что выдает гугл - это array_chunk
Ответы (2 шт):
Для того, чтобы N элементов разбить на три части, одна из которых меньше двух других, в качестве длины короткой части нужно взять любое число, не большее (N-2)/3
Short = любое из диапазона 1..(N-2)/3;
Middle = любое из диапазона Short+1..(N-Short)/2;
Large = N-Short-Middle (может быть равно Middle);
А потом переставляете длины частей, как угодно
Если вторая и третья часть тоже должны различаться - нетрудно чуть доработать
Пример генерации всех возможных разбиений ненулевой длины на Python
1 2 7
1 3 6
1 4 5
2 3 5
2 4 4
Реализация на PHP по алгоритму предложенному @MBo (если что плюсик за верный ответ ставьте ему :) )
<?php
$array_length = 10;
$p1 = rand(1, intval(($array_length-2)/3));
$p2 = rand($p1 + 1, intval(($array_length-$p1)/2));
$p3 = $array_length - $p1 - $p2;
$p = [$p1, $p2, $p3];
shuffle($p);
$p1 = $p[0];
$p2 = $p[1];
$p3 = $p[2];
echo $p1." ".$p2." ".$p3."\n";