根据成员使阵列处于最小最大范围内

时间:2018-08-23 11:18:40

标签: php

这是我的实际数组。

Array
(
    [0] => Array
        (
            [member] => 1
            [amount] => 50
        )

    [1] => Array
        (
            [member] => 500
            [amount] => 100
        )

    [2] => Array
        (
            [member] => 1000
            [amount] => 150
        )
     [3] => Array
        (
            [member] => 1000
            [amount] => 150
        )    
)

我想根据下一个索引数组元素成员创建一个具有范围的数组。 即我的分钟成员计数1和下一个索引数组元素成员计数500 So 0索引元素范围使 [min_member] => 1 [max_member] => 499

预期输出:

Array
(
    [0] => Array
        (
            [min_member] => 1
            [max_member] => 499
            [amount] => 50
        )

    [1] => Array
        (
            [min_member] => 500
            [max_member] => 999
            [amount] => 100
        )

    [2] => Array
        (
            [min_member] => 1000
            [max_member] => 1499
            [amount] => 150
        )
     [3] => Array
        (
            [max_member] => 1500
            [amount] => 150
        )    
)

1 个答案:

答案 0 :(得分:0)

我认为最后一项是错字(1000/1500?)。

我循环数组并使用键获取下一个项目成员(-1)作为最大值,并取消设置该成员。 循环后,我通过引用数组取消设置项目,因此$ item的任何更改都会更改数组。

foreach($arr as $key => &$item){
    $item['min_member'] = $item['member'];
    if(isset($arr[$key+1]['member'])) $item['max_member'] = $arr[$key+1]['member']-1;
    unset($arr[$key]['member']);
}
unset($item);
Var_dump($arr);

输出:

array(4) {
  [0]=>
  array(3) {
    ["amount"]=>
    int(50)
    ["min_member"]=>
    int(1)
    ["max_member"]=>
    int(499)
  }
  [1]=>
  array(3) {
    ["amount"]=>
    int(100)
    ["min_member"]=>
    int(500)
    ["max_member"]=>
    int(999)
  }
  [2]=>
  array(3) {
    ["amount"]=>
    int(150)
    ["min_member"]=>
    int(1000)
    ["max_member"]=>
    int(1499)
  }
  [3]=>
  &array(2) {
    ["amount"]=>
    int(150)
    ["min_member"]=>
    int(1500)
  }
}

https://3v4l.org/5GGo0