需要建议使用php的if-else语句

时间:2016-02-11 08:01:36

标签: php if-statement

当条件为true时,我正在尝试在selected中添加option。它工作正常,但它给了两次selected

foreach ($sorts as $sorts) { 
    if ($cat_id == 59 && $sorts['value'] == 'p.price-ASC') { // True if category id equal to 59
        <option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
    }else{
        if ($sorts['value'] == $sort . '-' . $order) { // True if values are equal
            <option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
        }else {
            <option value="<?php echo $sorts['href']; ?>"><?php echo $sorts['text']; ?></option>
        }
    }
} 

在上面,您可以看到selected有两个条件。

  1. 如果类别ID等于59 if ($cat_id == 59 && $sorts['value'] == 'p.price-ASC')
  2. ,则为真
  3. 如果值相等if ($sorts['value'] == $sort . '-' . $order)
  4. ,则为真

    在其他类别网页上,它完全正常,但在类别59上,两个if statements正在提供true。这就是为什么在这个页面上有两个selected正在添加两个option

    <option value="name-az" >Name (A - Z)</option>
    <option value="name-az" selected="selected">Name (Z - A)</option>
    <option value="p.price-ASC" selected="selected">Price (Low > High)</option>
    

    所以任何人都可以指导我如何修复或修改我一次只能获得一个真实条件的条件。感谢

2 个答案:

答案 0 :(得分:1)

您可以使用新的变量$ done来解决它,表明已经添加了所选的值:

$done = false;
foreach ($sorts as $sorts) { 
    if (!$done && $cat_id == 59 && $sorts['value'] == 'p.price-ASC') { // True if category id equal to 59
        <option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
        $done = true;
    }else{
        if (!$done && $sorts['value'] == $sort . '-' . $order) { // True if values are equal
            <option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
            $done = true;
        }else {
            <option value="<?php echo $sorts['href']; ?>"><?php echo $sorts['text']; ?></option>
        }
    }
} 

以上问题以及您的代码是foreach不正确。对于foreach来说,$ sorts作为$ sorts是不可能的。我已经将您的代码重构为更安全,更好用的代码。此代码也经过测试并按预期工作:

//INPUT:

$sort = 'name';
$order = 'za';
$cat_id = 59;

$sorts = array(
    'name-az' => 'Name (A - Z)',
    'name-za' => 'Name (Z - A)',
    'p.price-ASC' => 'Price (Low > High)',
    'p.price-DESC' => 'Price (High > Low)'
);

//CODE:

if(!array_key_exists($sort . '-' . $order, $sorts)) //check your input!
    throw new Exception('Invalid sort order.');

$selected = $cat_id == 59 ? 'p.price-ASC' : $sort . '-' . $order;

$done = false;
echo '<select>';
foreach ($sorts as $key => $value) {
    echo '<option value="'.htmlentities($key, ENT_QUOTES, 'UTF-8').'"'.($selected==$key?' selected="selected"':'').'>'.htmlentities($value, ENT_QUOTES, 'UTF-8').'</option>';
}
echo '</select>';

答案 1 :(得分:0)

为什么要使用2 if语句?这就是elseif的用途。这段代码对你有用吗?

foreach($sorts as $sorts)
{ 
 if($cat_id == 59 && $sorts['value'] == 'p.price-ASC')
 {
  <option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
  continue;
 }
 elseif($sorts['value'] == $sort . '-' . $order)
 {
  <option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
  continue;
 }
 else
 {
  <option value="<?php echo $sorts['href']; ?>"><?php echo $sorts['text']; ?></option>
 }
}