在PHP中继续循环通过偏移

时间:2016-07-21 08:55:35

标签: php arrays

我从结果中得到$arrLevel

Array
(
    [0] => Array
        (
            [ohp_id] => 98
            [parent_ohp_id] => 84
            [organization_id] => 122
            [position_id] => 32
            [level] => 3
            [seat] => 1
            [description] => 
            [start_date] => 2016-07-21
            [end_date] => 
            [title] => Coordinator Of Support Operational and Mainte
        )
)
Array
(
    [0] => Array
        (
            [ohp_id] => 84
            [parent_ohp_id] => 
            [organization_id] => 122
            [position_id] => 2
            [level] => 2
            [seat] => 1
            [description] => 
            [start_date] => 2016-07-21
            [end_date] => 
            [title] => Chief
        )
)

etc...

其中一个有空parent_ohp_id,在我的代码中它给出了错误Notice: Undefined offset: 1。这是我的代码:

for ($i = 0; $i < count($arrPosition); $i++) {
            $hasPosition->loadHas($orgId, $arrPosition[$i]);
            $level = search($arr, 'level', $arrLevel[$i]);
            //print_r($level);
           if(isset($level[$i]['parent_ohp_id'])){
               if((int)$level[$i]['parent_ohp_id'] == (int)$level[$i]['ohp_id']){
                   $parentOhp = null;
               }
               else{
                   $parentOhp = $level[$i]['parent_ohp_id'];
               }
           }
           else{
                $parentOhp = null;
           }
etc...

导致偏移,循环过程停止以及它无法显示/无法继续循环之后的所有数组。如何修复它并将未定义的偏移parent_ohp_id设置为null?感谢...

2 个答案:

答案 0 :(得分:0)

我认为你应该使用empty()而不是isset():

for ($i = 0; $i < count($arrPosition); $i++) {
        $hasPosition->loadHas($orgId, $arrPosition[$i]);
        $level = search($arr, 'level', $arrLevel[$i]);
        //print_r($level);
       if(!empty($level[$i]['parent_ohp_id'])){
           if((int)$level[$i]['parent_ohp_id'] == (int)$level[$i]['ohp_id']){
               $parentOhp = null;
           }
           else{
               $parentOhp = $level[$i]['parent_ohp_id'];
           }
       }
       else{
            $parentOhp = null;
       }

答案 1 :(得分:0)

你的数组很少

  • $arrPosition
  • $arrLevel
  • $level

在内部循环中使用相同的键$i。因为$i是简单的整数迭代,所以在循环之前你可以使用这段代码来确保所有表都有相同的整数键(不可能缺少)

$arrPosition = array_values($arrPosition);
$arrLevel = array_values($arrLevel);
$level = array_values($level);

我想你需要在每个提到的数组中使用索引$i的所有元素,所以你应该在for循环语句之后添加这一行

if (array_key_exists($i, $arrPosition) and array_key_exists($i, $arrLevel) and array_key_exists($i, $level)) {
    //do everything you need inside loop
} //this close brace is just before brace closing your for loop

您的代码中的此声明

if(isset($level[$i]['parent_ohp_id'])){

应该替换为

if(!empty($level[$i]['parent_ohp_id'])) {

根据上述内容,您可以使用此

替换您的代码
$arrPosition = array_values($arrPosition);
$arrLevel = array_values($arrLevel);
$level = array_values($level);

for ($i = 0; $i < count($arrPosition); $i++) {
    if (array_key_exists($i, $arrPosition) and array_key_exists($i, $arrLevel) 
        $hasPosition->loadHas($orgId, $arrPosition[$i]);
        $level = search($arr, 'level', $arrLevel[$i]);
        //print_r($level);
        if(!empty($level[$i]['parent_ohp_id'])) {
            if((int)$level[$i]['parent_ohp_id'] == (int)$level[$i]['ohp_id']) {
                $parentOhp = null;
            } else {
                $parentOhp = $level[$i]['parent_ohp_id'];
            }
        } else {
            $parentOhp = null;
        }

etc... [remember to close the if statement before closing for loop]