PHP Создать новый массив из существующего массива с некоторыми математическими вычислениями для нового массива [многомерный] - PullRequest
0 голосов
/ 26 июня 2018

У меня есть многомерный массив, который выглядит так:

$arrayOne = array(
    0 => array(
        "no"=> "1",
        "value"=>100
    ), 
    1=> array(
        "no"=> "2",
        "value"=>"20"
    )
    2=> array(
        "no"=> "3",
        "value"=>"30"
    )
);

Я хочу создать новый массив, в котором:

1st new array value = 100+50 (equal to 150, where 50 is an amount that I want to add to the array).
2nd new array value = 20+150 (equal to 170, where 150 is the total of 1st new array)
3rd new array value = 30+170 (equal to 200, where 170 is the total of 2nd new array)

Это выполнимо? Выход должен быть:

   $newArrayOne = array(
        0 => array(
            "no"=> "1",
            "value"=>150
        ), 
        1=> array(
            "no"=> "2",
            "value"=>"170"
        )
        2=> array(
            "no"=> "3",
            "value"=>"200"
        )
    );

Это требование для меня слишком сложно. Может кто-нибудь просто поделится со мной концепцией, я постараюсь разобраться в этом.

Большое спасибо.

Ответы [ 5 ]

0 голосов
/ 26 июня 2018

Я приложил мало усилий для вас. Я надеюсь, что это сработает для вас.

<?php
echo "<pre>";
$arrayOne = array(
    0 => array(
        "no"=> "1",
        "value"=>100
    ), 
    1=> array(
        "no"=> "2",
        "value"=>"20"
    ),
    2=> array(
        "no"=> "3",
        "value"=>"30"
    )
);
$valnewarr = array();
$valdata = 50;
$i = 0;
foreach($arrayOne as $val){
$valdata = $val['value']+$valdata;
$valnewarr['no'] = ++$i;
$valnewarr['value']  = $valdata;
$newArrayOne[] = $valnewarr;
}
print_r($newArrayOne);
?>
0 голосов
/ 26 июня 2018

$ newArray = $ arrayOne;

foreach ($ arrayOne as $ k => $ v) {

$newArray[$k]['value'] = ($k == 0) ? array_sum(array_column($arrayOne, 'value')) : $newArray[$k-1]['value'] + $arrayOne[$k]['value'];

}

print_r ($ newArray);

0 голосов
/ 26 июня 2018

Вы можете использовать classic foreach loop

$arrayOne = //Your array here...

$newArrayOne  = array();
$toAdd = 50;

foreach( $arrayOne as $key => $val ) {
    $newArrayOne[$key] = $val;  //Assign the value to $newArrayOne

    if ( $key === 0 ) $newArrayOne[$key]['value'] += $toAdd;  //Modify the value: If $key is 0, add 50
    else $newArrayOne[$key]['value'] += $newArrayOne[ $key - 1 ]['value'];  //If $key is not 0, add the value of last entry of $newArrayOne
}

Это приведет к:

Array
(
    [0] => Array
        (
            [no] => 1
            [value] => 150
        )

    [1] => Array
        (
            [no] => 2
            [value] => 170
        )

    [2] => Array
        (
            [no] => 3
            [value] => 200
        )

)
0 голосов
/ 26 июня 2018
$first_array = array(
0 => array(
    "no"=> "1",
    "value"=>100
), 
1=> array(
    "no"=> "2",
    "value"=>"20"
),
2=> array(
    "no"=> "3",
    "value"=>"30"
)
);

$to_be_added = 50; //this is what you want to add to your first value

foreach ($first_array as $key => $val){

  $to_be_added = (int)$val['value'] + $to_be_added ; //type casting
  $newArrayOne[$key]['no']= $val['no'];
  $newArrayOne[$key]['value']= $to_be_added; 


}

print_r($newArrayOne);

Обратите внимание, что im type переводит ваши значения в целые числа, потому что не все ваши "значения" являются целыми числами.

Ваш вывод

Array ( [0] => Array ( [no] => 1 [value] => 150 ) [1] => Array ( [no] => 2 [value] => 170 ) [2] => Array ( [no] => 3 [value] => 200 ) )
0 голосов
/ 26 июня 2018

Примерно так:

$arrayOne[0]['value'] += 50;
for($i=1; $i<count($arrayOne); $i++) {
    $arrayOne[$i]['value'] += $arrayOne[$i-1]['value'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...