带条件的新元素添加到我的数组

时间:2019-07-03 17:37:50

标签: php arrays

我正在处理一个小型PHP项目,我想将我的 total_ca 从我的第二个数组复制到第一个中,其中月键和年份相同第二个数组的值。

请先谢谢

    Array
(
    [1] => Array
        (
            [current] => Array
                (
                    [year] => 2019
                    [month] => 1
                )

            [past] => Array
                (
                    [year] => 2018
                    [month] => 1
                )

        )

    [2] => Array
        (
            [current] => Array
                (
                    [year] => 2019
                    [month] => 2
                )

            [past] => Array
                (
                    [year] => 2018
                    [month] => 2
                )

        )

)

我的第二个数组

    Array
(
    [0] => Array
        (
            [year] => 2018
            [month] => 1
            [total_ca] => 1200.000000
        )

    [1] => Array
        (
            [year] => 2019
            [month] => 1
            [total_ca] => 6000.000000
        )

)

您可以在这里找到我想要得到的结果 提前非常感谢

[1] => Array
(
    [current] => Array
    (
        [year] => 2019
        [month] => 1
        [total_ca] => 6000.000000
                )

            [past] => Array
(
        [year] => 2018
        [month] => 1
        [total_ca] => 1200.000000
                )

        )

2 个答案:

答案 0 :(得分:0)

您可以使用几个嵌套的foreach循环来完成此操作。

foreach($arr1 as &$records) { //Loop through top level array

    foreach($records as &$record) { //Loop through subarrays (current & past for each top level array)

        foreach($arr2 as $ar2) { //Loop through 2nd array

            //if values in 2nd array match those in subarray, add `total_ca` to 2nd array.
            if($ar2['year'] == $record['year'] && $ar2['month'] == $record['month']) {
                $record['total_ca'] = $ar2['total_ca'];   
            }

        }

    }

}

我也使用&符号,这称为reference;它基本上可以让您更改要遍历的数组,而无需创建新数组。

结果:

Array
(
    [0] => Array
        (
            [current] => Array
                (
                    [year] => 2019
                    [month] => 1
                )

            [past] => Array
                (
                    [year] => 2018
                    [month] => 1
                    [total_ca] => 1200
                )

        )

    [1] => Array
        (
            [current] => Array
                (
                    [year] => 2019
                    [month] => 2
                )

            [past] => Array
                (
                    [year] => 2018
                    [month] => 2
                )

        )

)

答案 1 :(得分:0)

我已修复它,这是解决方案

 $arr1 = array();
    $arr2 = $this->thirdparties->chart(6)->result_array();
    for($i = 0; $i <= 11; $i++){
        $arr1[$i][date('Y')] = array('total_ca' => null, 'month' => $i + 1);
        $arr1[$i][date('Y') - 1] = array('total_ca' => null,'month' => $i + 1);
        if(isset($arr2[$i]['month'])){
            if($arr2[$i]['year'] == date('Y')){
                $arr1[$i][date('Y')]['total_ca'] = $arr2[$i]['total_ca'];
            }
        }
        if(isset($arr2[$i]['month'])){
            if($arr2[$i]['year'] == date('Y') - 1){
                $arr1[$i][date('Y') - 1]['total_ca'] = $arr2[$i]['total_ca'];
            }
        }
    }