2016-07-21 70 views
0

偏移我$arrLevel從截枝結果:繼續遍歷PHP

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?謝謝...

回答

0

我認爲你應該使用空(),而不是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; 
     } 
+0

它解決了錯誤更換你的代碼,但仍不能繼續循環 –

0

你有幾陣

  • $arrPosition
  • $arrLevel
  • $level

使用相同的密鑰$i內循環。由於$i是簡單的整數迭代那麼你的循環之前,你可以使用此代碼,以確保所有表具有相同的整數鍵(無可能沒有)

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

我猜你需要的所有元素的索引$i每提到數組中,所以你應該在你的代碼只是後添加此行的循環語句

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] 
+0

它解決了錯誤,但仍然無法繼續循環 –

+0

我改進了我的答案。如果它現在正在工作,那麼請在每個提到的數組上做一個var_dump併發布有問題的結果。 – zajonc