PHP: разбить массив по условиям

У меня есть массив $ значения а также $ Tmax = 500:

    $values = array (
array (0 => "MONTENVERS"),
array (0 => "HUVEAU"),
array (0 => "PHILOGUI"),
array (0 => "SEGARD CHRISTINE PATRIMOINE"),
array (0 => "STIQUEL"),
array (80 => "LINO"),
array (86 => "MAUBERT"),
array (94 => "GOSSELIN" ),
array (97 => "LIMPA" ),
array (98 => "CASSIERA" ),
array (120 => "LES VIGNES"),
array (123 => "WURTZ"),
array (124 => "ROUSSET-GAILLARD" ),
array (124 => "LEGRAND" ),
array (126 => "SANZ" ),
array (131 => "VIRONNEAU"),
array (133 => "SOCCORO"),
array (136 => "DESNOS"),
array (178 => "BARRIAC"),
array (233 => "MONTALBETTI"),
array (251 => "FOSSET"),
array (264 => "HERY"),
array (350 => "HUVEAU"),
array (352 => "GABSARIC"),
array (471 => "DSR"),
array (573 => "RTAIMATE"),
array (582 => "DEGERMANN"),
array (589 => "PIERVIE"),
array (601 => "BLC"),
array (617 => "SP PATRIMOINE"),
array (3467 => "RESIDENCE ORPEA DES RIVES D'OR"),
);

Я хочу 2 результата:

сумма ценностей и стоимости <= $ tmax (nb off итерация может быть между 3 и
N)

http://joberjob.com/script/index.php

сумма значений и значения> 5 $ tmax (nb вне итерации может быть максимум 3)

http://joberjob.com/script/index.php

Пример:
У меня есть это :
Результат ошибки

Я хочу чтобы
ОК результат

-4

Решение

Чрезвычайно сложно понять, чего вы пытаетесь достичь — даже по изображениям. Но это то, что вы хотите?

    $Tmax = 500;

$collection = [];
$sum = 0;
$index = 0;

foreach ($values as $value) {
if (!isset($collection[$index])) {
$collection[$index] = [];
}

if (key($value) + $sum < $Tmax) {
$collection[$index][] = $value;
$sum += key($value);

continue;
}

if (count($collection[$index]) > 2) {
$sum = 0;
$index ++;
}

if (!isset($collection[$index])) {
$collection[$index] = [];
}

if (key($value) + $sum < $Tmax) {
$collection[$index][] = $value;
$sum += key($value);

continue;
}
}

print_r($collection);
1

Другие решения

$values = array (
array (
0 => "MONTENVERS"),
array (
0 => "HUVEAU"),
array (
0 => "PHILOGUI"),
array (
0 => "SEGARD CHRISTINE PATRIMOINE"),
array (
0 => "STIQUEL"),
array (
80 => "LINO"),
array (
86 => "MAUBERT"),
array (
94 => "GOSSELIN"),
array (
352 => "GABSARIC"),
array (
471 => "DSR"),
array (
573 => "RTAIMATE")
);

//$Tmax = 500;

$collection = [];
$sum = 0;
$index = 0;

foreach ($values as $value) {
if (!isset($collection[$index])) {
$collection[$index] = [];
}

if (key($value) + $sum <= $Tmax) {
$collection[$index][] = $value;
$sum += key($value);

continue;
}if (count($collection[$index]) > 2) {
$sum = 0;
$index ++;
}if (!isset($collection[$index])) {
$collection[$index] = [];
}

if (key($value) + $sum > $Tmax) {
$collection[$index][] = $value;
$sum += key($value);

continue;
}
}

var_dump($collection);die;

?>

этот код показывается : результат

но я хочу : resultOK

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector