PHP多维数组某条字段如何按总值递减,总值减完为止?

Array
(

[0] => Array
    (
        [id] => 5534
        [hours] => 40
    )

[1] => Array
    (
        [id] => 5402
        [hours] => 12
    )

)

举例这个数组,这边需要扣除总数50,如何处理上面数组,扣完后,第一个hours扣除40后为0,第二个扣除10为2,如果总数为30,那就第一个扣完剩余10,第二个hours不变,以此类推。

或者如何直接更新数据表,这2条数据从表里拿的,处理完后,根据ID再更新数据表

求大佬指教!!!

阅读 1.8k
2 个回答

提供数据不要提供 var_dump 或者 print_r 的打印结果,不便于组装数据。

你可以提供 JSON 或者 var_export 的结果。

<?php

$source = [
    [
        'id'    => 1,
        'hours' => 40,
    ],
    [
        'id'    => 2,
        'hours' => 10
    ],
    [
        'id'    => 2,
        'hours' => 30
    ],
    [
        'id'    => 2,
        'hours' => 15
    ],
];

$over = 50;
foreach ($source as &$item) {
    if ($over === 0) {
        break;
    }

    if ($item['hours'] > $over) {
        $item['hours'] -= $over;
        $over = 0;
    } else {
        $over -= $item['hours'];
        $item['hours'] = 0;
    }

    unset($item);
}

var_dump($source, $over);
新手上路,请多包涵

楼上提供的方法就可行,如果你还要把更新后的数据入库,那还可以在循环外定义一个数组$updateData来存放修改过的数据,用于数据更新。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题