Разделить / разделить массив на основе значения, суммирующего до заданного значения, и соответствующего элемента, который будет сгруппирован внутри разделенного массива - PullRequest
0 голосов
/ 05 июля 2019

Для массива, подобного приведенному ниже, есть способ, позволяющий разделить / разделить массив на основе значения, равного заданному значению.например, если бы я хотел, чтобы они были меньше 250, также его соответствующий элемент должен быть сгруппирован внутри разделенного массива.

Example

Array
(

    [42] => 10
    [55] => 20
    [56] => 10
    [57] => 4
    [58] => 5
    [59] => 240

)

Вывод должен быть таким, как показано ниже:

Array
(
    [0] => Array
        (

            ['value'] => Array
                (
                    [0] => 10
                    [1] => 20
                    [2] => 10
                    [3] => 4
                    [4] => 5
                ),

            ['element'] => Array
                (
                    [0] => 42
                    [1] => 55
                    [2] => 56
                    [3] => 57
                    [4] => 58
                ),

        )

    [1] => Array
        (
           ['value'] => Array
                (
                    [0] => 240

                ),

            ['element'] => Array
                (
                    [0] => 59
                ),
        )
    );

1 Ответ

1 голос
/ 05 июля 2019

Цикл массива и отслеживание суммы.
Если значение больше 250, сбросьте счетчик суммы и запустите новый подмассив.

$arr = Array(
    42 => 10,
    55 => 20,
    56 => 10,
    57 => 4,
    58 => 5,
    59 => 240
);

// Can we do all in one subarray?
if(array_sum($arr) >= 250){
//No
    $sum = 0;
    $index = 0;
    $result[$index] =[];
    //Loop the array and keep the sum in memory
    foreach($arr as $key => $val){
        if($sum + $val < 250){
            //Less than 250, just keep adding the values
            $result[$index]['values'][] =  $val;
            $result[$index]['elements'][] = $key;
            $sum += $val;
        }else{
            // More than 250, create a new subarray and reset sum
            $sum = $val;
            $index++;
            $result[$index] = ['values' => [$val], 'elements' => [$key]];
        }
    }
}else{
//Yes, group the values and keys
    $result = [['values' => array_values($arr), 'elements' => array_keys($arr)]];
}

var_dump($result);

https://3v4l.org/jSdsA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...