当条件为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
有两个条件。
if ($cat_id == 59 &&
$sorts['value'] == 'p.price-ASC')
if ($sorts['value'] == $sort . '-' .
$order)
在其他类别网页上,它完全正常,但在类别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>
所以任何人都可以指导我如何修复或修改我一次只能获得一个真实条件的条件。感谢
答案 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>
}
}