PHP - 如何解决错误的嵌套IF语句?

时间:2017-01-17 02:51:18

标签: php if-statement

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;
}

我知道这是不好的做法..但是如何重写为一个好的功能结构。我知道返回会让这段代码更干净..但我不知道该把它放在哪里。

2 个答案:

答案 0 :(得分:1)

除非我遗漏了某些东西,否则这看起来好像是在使用Do / While循环。虽然您可能需要调整函数以确保按预期进行结果集。

<?php
$key = 'password';
$hash = password_hash($key, PASSWORD_BCRYPT);
$salt = substr($hash, 7, 22);
$rehash = password_hash($key, PASSWORD_BCRYPT, ['salt' => $salt]);
if ($hash == $rehash) {
  echo 'ok', PHP_EOL;
}

此外,在调试嵌套的IF语句时,如果松开了位置,请在打开的大括号右侧开始添加注释标记,并在关闭它们时将其计数。

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);

答案 1 :(得分: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);
}