cakePHP多维数组循环返回到上一个推送

jampez77

我创建了一个数组,该数组需要显示当前用户的项目列表。每个项目都是由阶段组成的,每个阶段可以分配有多个KPI。

如您所见,这些阶段都很好地附加到了数组上,并且大多数情况下,KPI也是如此。

并非特定于阶段的KPI例外。当我拥有这种类型的KPI时,应将其分配到项目部分,因为它跨多个阶段。

KPI由PSID分配给各个阶段,如果id为null,则它是项目范围的KPI。

我遇到的问题是项目范围的KPI。它们是重复的,我需要每个KPI在数组中出现一次。

我试图用当前推送的元素检查先前推送的数组元素,以便进行检查。

$i=0;
    foreach($projects as $project){
        $projectStages = $this->ProjectStages->find('all',
                array(
                        'conditions' => array(
                            'pid' => $project['Projects']['pid']
                        )
                )
        );
        array_push($projects[$i], $projectStages);


        $n=0;
        foreach($projectStages as $stage){
            $projectKPIs = $this->ProjectKPIs->find('all',
                    array(
                            'conditions' => array(
                                    'nPid' => $project['Projects']['pid']
                            )
                    )
            );  

            foreach($projectKPIs as $projectKPI){
                if(empty($projectKPI['ProjectKPIs']['nPsid'])){

                    $N = $n-1;
                    $curpkid = $projectKPI['ProjectKPIs']['pkid'];

                    if(isset($projects[$i]['Projects'][$N]['ProjectKPIs']['pkid'])){
                        $prevpkid = $projects[$i]['Projects'][$N]['ProjectKPIs']['pkid'];
                    }else{
                        $prevpkid = null;
                    }

                    if($curpkid != $prevpkid){
                        echo 'cur: '.$curpkid.' - prev: '.$prevpkid;
                        array_push($projects[$i]['Projects'], $projectKPI);
                    }

                }else if($projectKPI['ProjectKPIs']['nPsid'] == $stage['ProjectStages']['psid']){
                    array_push($projects[$i][$i][$n]['ProjectStages'], $projectKPI);
                }

            }



            $n++;
        }


        $i++;
    }

以下是我正在使用的代码以及当前返回的数组:

Array
(
[0] => Array
    (
        [Projects] => Array
            (
                [pid] => 811
                [name] => Kpi Project
                [description] => This Project Has Kpis
                [scheduledStartDate] => 2015-05-01
                [scheduledEndDate] => 2015-06-01
                [actualStartDate] => 
                [actualEndDate] => 
                [pmid] => 1137
                [0] => Array
                    (
                        [ProjectKPIs] => Array
                            (
                                [pkid] => 37
                                [nPsid] => 
                                [type] => 1
                                [start] => 2015-05-03
                                [end] => 2015-05-09
                                [nPid] => 811
                                [nKid] => 7
                            )

                    )

                [1] => Array
                    (
                        [ProjectKPIs] => Array
                            (
                                [pkid] => 37
                                [nPsid] => 
                                [type] => 1
                                [start] => 2015-05-03
                                [end] => 2015-05-09
                                [nPid] => 811
                                [nKid] => 7
                            )

                    )

                [2] => Array
                    (
                        [ProjectKPIs] => Array
                            (
                                [pkid] => 37
                                [nPsid] => 
                                [type] => 1
                                [start] => 2015-05-03
                                [end] => 2015-05-09
                                [nPid] => 811
                                [nKid] => 7
                            )

                    )

                [3] => Array
                    (
                        [ProjectKPIs] => Array
                            (
                                [pkid] => 37
                                [nPsid] => 
                                [type] => 1
                                [start] => 2015-05-03
                                [end] => 2015-05-09
                                [nPid] => 811
                                [nKid] => 7
                            )

                    )

                [4] => Array
                    (
                        [ProjectKPIs] => Array
                            (
                                [pkid] => 37
                                [nPsid] => 
                                [type] => 1
                                [start] => 2015-05-03
                                [end] => 2015-05-09
                                [nPid] => 811
                                [nKid] => 7
                            )

                    )

            )

        [pm] => Array
            (
                [first_name] => Mr
                [last_name] => A
            )

        [0] => Array
            (
                [0] => Array
                    (
                        [ProjectStages] => Array
                            (
                                [psid] => 99
                                [pid] => 811
                                [stageID] => 1
                                [name] => 1
                                [description] => 1
                                [label] => 1
                                [actualStartDate] => 0000-00-00
                                [scheduledStartDate] => 2015-05-01
                                [actualEndDate] => 0000-00-00
                                [scheduledEndDate] => 2015-05-08
                                [prevStage] => n
                                [keyStage] => n
                                [0] => Array
                                    (
                                        [ProjectKPIs] => Array
                                            (
                                                [pkid] => 32
                                                [nPsid] => 99
                                                [type] => 0
                                                [start] => 
                                                [end] => 
                                                [nPid] => 811
                                                [nKid] => 2
                                            )

                                    )

                            )

                    )

                [1] => Array
                    (
                        [ProjectStages] => Array
                            (
                                [psid] => 100
                                [pid] => 811
                                [stageID] => 2
                                [name] => 2
                                [description] => 2
                                [label] => 2
                                [actualStartDate] => 0000-00-00
                                [scheduledStartDate] => 2015-05-08
                                [actualEndDate] => 0000-00-00
                                [scheduledEndDate] => 2015-05-15
                                [prevStage] => n
                                [keyStage] => n
                                [0] => Array
                                    (
                                        [ProjectKPIs] => Array
                                            (
                                                [pkid] => 33
                                                [nPsid] => 100
                                                [type] => 0
                                                [start] => 
                                                [end] => 
                                                [nPid] => 811
                                                [nKid] => 4
                                            )

                                    )

                            )

                    )

                [2] => Array
                    (
                        [ProjectStages] => Array
                            (
                                [psid] => 101
                                [pid] => 811
                                [stageID] => 3
                                [name] => 3
                                [description] => 3
                                [label] => 3
                                [actualStartDate] => 0000-00-00
                                [scheduledStartDate] => 2015-05-15
                                [actualEndDate] => 0000-00-00
                                [scheduledEndDate] => 2015-05-22
                                [prevStage] => n
                                [keyStage] => n
                                [0] => Array
                                    (
                                        [ProjectKPIs] => Array
                                            (
                                                [pkid] => 34
                                                [nPsid] => 101
                                                [type] => 0
                                                [start] => 
                                                [end] => 
                                                [nPid] => 811
                                                [nKid] => 5
                                            )

                                    )

                            )

                    )

                [3] => Array
                    (
                        [ProjectStages] => Array
                            (
                                [psid] => 102
                                [pid] => 811
                                [stageID] => 4
                                [name] => 4
                                [description] => 4
                                [label] => 4
                                [actualStartDate] => 0000-00-00
                                [scheduledStartDate] => 2015-05-22
                                [actualEndDate] => 0000-00-00
                                [scheduledEndDate] => 2015-05-29
                                [prevStage] => n
                                [keyStage] => n
                                [0] => Array
                                    (
                                        [ProjectKPIs] => Array
                                            (
                                                [pkid] => 35
                                                [nPsid] => 102
                                                [type] => 0
                                                [start] => 
                                                [end] => 
                                                [nPid] => 811
                                                [nKid] => 6
                                            )

                                    )

                            )

                    )

                [4] => Array
                    (
                        [ProjectStages] => Array
                            (
                                [psid] => 103
                                [pid] => 811
                                [stageID] => 5
                                [name] => 5
                                [description] => 5
                                [label] => 5
                                [actualStartDate] => 0000-00-00
                                [scheduledStartDate] => 2015-05-29
                                [actualEndDate] => 0000-00-00
                                [scheduledEndDate] => 2015-06-01
                                [prevStage] => n
                                [keyStage] => n
                                [0] => Array
                                    (
                                        [ProjectKPIs] => Array
                                            (
                                                [pkid] => 36
                                                [nPsid] => 103
                                                [type] => 0
                                                [start] => 
                                                [end] => 
                                                [nPid] => 811
                                                [nKid] => 8
                                            )

                                    )

                            )

                    )

            )

    )

[1] => Array
    (
        [Projects] => Array
            (
                [pid] => 572
                [name] => Sgh
                [description] => Dfgh
                [scheduledStartDate] => 2015-04-01
                [scheduledEndDate] => 2015-05-01
                [actualStartDate] => 
                [actualEndDate] => 
                [pmid] => 3304
            )

        [pm] => Array
            (
                [first_name] => Mr
                [last_name] => Brown
            )

        [0] => Array
            (
            )

    )

)
约翰·麦克马洪

似乎您正在多次检索相同的确切数据库结果。我正在查看此代码块中的查找结果:

    foreach($projectStages as $stage){
            $projectKPIs = $this->ProjectKPIs->find('all',
                    array(
                            'conditions' => array(
                                    'nPid' => $project['Projects']['pid']
                            )
                    )
            ); 

            // ...
    }

在我看来,您将$projectKPIs在foreach的每次迭代中获得相同的结果集,$projectStages因为find forProjectKPIs正在使用项目ID,而与当前$stage无关

如此有效地在每个阶段中,您都可以再次遍历所有相同的KPI,从而使逻辑陷入混乱,从而避免重复。

也许可以通过重组foreach循环来简化此过程。我将放弃外部foreach($projectStages as $stage),然后仅对所有KPI进行一次迭代。然后,仅当您需要针对进行测试时,才在该循环内迭代每个阶段$stage['ProjectStages']['psid'],这当时可能实际上是不必要的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

图标旋转,但返回到上一个位置

跳转后返回到上一个光标点

创建新工作表,然后返回到上一个活动工作表

C#:重置按钮或返回到上一个空隙

需要按两次以返回到上一个片段

Git恢复推送到上一个推送

如何防止回到上一个活动?

导航回到上一个AMP列表页面

如何回到上一个开关?

powershell回到上一个换行符

如何回到上一个片段

CodeIgniter + Bootstrap选项卡,重新加载不会返回到上一个活动选项卡

从文档开始查找和替换,但将光标返回到上一个位置

如何单击返回到上一个活动,两次单击该如何退出应用程序?

在一个 UIViewController 中,如何判断是到下一个 UIViewController 还是返回到上一个 UIViewController

“继续”“ for”循环到上一个元素

代号一回到上一个表格命令错误

AngularJS:如何返回到上一个视图中返回时在运行时加载的DOM元素(保留状态)

将数据从当前片段传回到上一个片段

如何从当前活动中获得结果,然后回到上一个活动

从班级Swift回到上一个控制器

当我回到上一个组件时,Angular 重新初始化组件

回到上一个像ListView的Fragment之后,我可以保持ScrollView的位置吗?

快捷方式可跳回到上一个位置

导航回到上一个选项卡后未显示数据

导航回到上一个视图控制器

数据不会传回到上一个TableView控制器

Unity 动画过渡故障回到上一个动画

如何返回到 VBA 的上一个工作表?