2017-01-17 9 views
0
if($parent_id_current > 0) { 
     $parent_id = $parent_id_current; 
     $sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$parent_id_current'"; 
     $parent_id_current = $GLOBALS['db']->getOne($sql); 
     if($parent_id_current > 0) { 
      $parent_id = $parent_id_current; 
      $sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$parent_id_current'"; 
      $parent_id_current = $GLOBALS['db']->getOne($sql); 
      if($parent_id_current > 0) { 
       $parent_id = $parent_id_current; 
       $sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$parent_id_current'"; 
       $parent_id_current = $GLOBALS['db']->getOne($sql); 
       if($parent_id_current > 0) { 
        $parent_id = $parent_id_current; 
        $sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$parent_id_current'"; 
        $parent_id_current = $GLOBALS['db']->getOne($sql); 
        if($parent_id_current > 0) { 
         $parent_id = $parent_id_current; 
         $sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$parent_id_current'"; 
         $parent_id_current = $GLOBALS['db']->getOne($sql); 
         if($parent_id_current > 0) { 
          $parent_id = $parent_id_current; 
         } 
        } 
       } 
      } 
     } 
    } 
} else { 
    $parent_id = 0; 
} 

は、私は、これは悪い習慣を知っている..しかし、どのように良い機能構造に書き換えること。私はリターンがこのコードをよりクリーンにすることを知っています..しかし、私はどこに置くべきか分かりません。PHP - どのように悪いネストされたIFステートメントをスロー?

答えて

0

whileループでそれを機能して呼び出すようにコードを移動します。ブレーク条件は、あなたの場合は条件を設定したよう:

$parent_id = 0; 
while ($parent_id_current > 0) { 
    $parent_id = $parent_id_current; 
    $parent_id_current = getParentId($parent_id_current); 
} 

function getParentId($id) { 
    $sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$id'"; 
    return $GLOBALS['db']->getOne($sql); 
} 
+0

はあなたに感謝します!それは働く –

1

私が何かを逃した場合を除き、これは、DO/whileループの良い使用のように見えます。結果セットを予想通りに進めるために関数を調整する必要があるかもしれませんが。

do { 
    $parent_id = $parent_id_current; 
    $sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . "WHERE cat_id = '$parent_id_current'"; 
    $parent_id_current = $GLOBALS['db']->getOne($sql); 
} while ($parent_id_current > 0); 

また、IFネストされたステートメントをデバッグするとき、あなたがあなたの場所を失う場合は、左中括弧の右側のコメントフラグの追加を開始し、あなたがそれらを閉じるようにそれらをカウントダウン。

IF (test) { // 1 
echo $something; 
IF (test) { // 2 
echo $something_else; 
IF (test) { // 3 
die; 
} // 3 
} // 2 
} // 1 
関連する問題