duanjiaren8188 2017-06-23 16:23
浏览 26

数组检查日期是否存在于数组中,从句点日期范围填充上一个数组PHP的值

Hope this post is not a duplicate, I've looking for a solution but I'm really stuck, maybe somebody pass trough this and has a solution.

I have a set of array that pass into a graph, the desire graph need to show all the data even if in the desired day doesn't exist value for one sub array data.

This is my array:

$setData = array(
            '2017-06-21' => array(
                'gender1' => array(
                    'value1' => 100,
                    'value2' => 100,
                    'value3' => 100,
                ),
                'gender2' => array(
                    'value1' => 200,
                    'value2' => 200,
                    'value3' => 200,
                ),
                'gender3' => array(
                    'value1' => 300,
                    'value2' => 300,
                    'value3' => 300,
                )
            ),
            '2017-06-22' => array(
                'gender1' => array(
                    'value1' => 90,
                    'value2' => 90,
                    'value3' => 90,
                ),
                'gender3' => array(
                    'value1' => 200,
                    'value2' => 200,
                    'value3' => 200,
                )
            ),
            '2017-06-23' => array(
                'gender2' => array(
                    'value1' => 150,
                    'value2' => 150,
                    'value3' => 150,
                ),
                'gender3' => array(
                    'value1' => 150,
                    'value2' => 150,
                    'value3' => 150,
                )
            ),
        );

So, at this way on date 22 in the graph will dissapear the line or bar stack for gender 2 and on 23 for gender 1, what i need is to keep the line or bar stack even if in 22 i don't have values for gender 2 and on 23 values for gender 1

The desired result should be:

$setDataNeed = array(
            '2017-06-21' => array(
                'gender1' => array(
                    'value1' => 100,
                    'value2' => 100,
                    'value3' => 100,
                ),
                'gender2' => array(
                    'value1' => 200,
                    'value2' => 200,
                    'value3' => 200,
                ),
                'gender3' => array(
                    'value1' => 300,
                    'value2' => 300,
                    'value3' => 300,
                )
            ),
            '2017-06-22' => array(
                'gender1' => array(
                    'value1' => 90,
                    'value2' => 90,
                    'value3' => 90,
                ), 
                /* Keep values from gender2 from 21 date*/
                'gender2' => array(
                    'value1' => 200,
                    'value2' => 200,
                    'value3' => 200,
                ),
                'gender3' => array(
                    'value1' => 200,
                    'value2' => 200,
                    'value3' => 200,
                )
            ),
            '2017-06-23' => array(
                /* Keep values for gender1 from 22 date*/
                'gender1' => array(
                    'value1' => 90,
                    'value2' => 90,
                    'value3' => 90,
                ),
                'gender2' => array(
                    'value1' => 150,
                    'value2' => 150,
                    'value3' => 150,
                ),
                'gender3' => array(
                    'value1' => 150,
                    'value2' => 150,
                    'value3' => 150,
                )
            ),
        );
  • 写回答

2条回答 默认 最新

  • doucheng1884 2017-06-23 16:40
    关注

    Simply remember previous row and insert it if needed.

    function prepare($aIn) {
        $aRes = array();
        $prev = array();
        $keys = array('gender1', 'gender2', 'gender3',);
    
        foreach ($aIn as $row) {
            foreach ($keys as $k) {
                if (!isset($row[$k]) && isset($prev[$k])) {
                    $row[$k] = $prev[$k];
                }
            }
    
            $aRes[] = $row;
            $prev = $row;
        }
    
        return $aRes;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗