public function actionEditmul($id)
{
$sql1="SELECT * FROM category_product INNER JOIN category ON category_product.cat_id=category.cat_id WHERE category_product.product_id=$id";
$editcat=Yii::$app->db->createCommand($sql1)->queryAll();
$cat=Category::find()->all();
return $this->render('editmul',['category'=>$cat,'editcat'=>$editcat]);
}
并且在html表单中是:
<?php foreach ($editcat as $edit): ?>
<input type="checkbox" name="cat[]" checked="checked" value="<?php echo $edit['cat_id'];?>" ><?php echo $edit['category'];?><br>
<?php endforeach; ?>
<?php foreach ($category as $categories): ?>
<input type="checkbox" name="cat[]" value="<?php echo $categories->cat_id;?>"><?php echo $categories->category;?><br>
<?php endforeach; ?>
<br>
使用第一个循环,我得到所有类别的值。并且通过第二个循环,我获得了从第一个开始检查的所有类别的值。我想要的是不要在第二个循环中获取已检查类别的值。希望你明白。
答案 0 :(得分:0)
可能你可以将IDS从第一个循环存储到数组显示只存储在第二个循环中没有在数组中找到的那个。
就像这样,
<?php $arrayofcategories=array(); ?>
<?php foreach ($editcat as $edit): ?>
<?php $arrayofcategories[]=$edit['cat_id']; ?>
<input type="checkbox" name="cat[]" checked="checked" value="<?php echo $edit['cat_id'];?>" ><?php echo $edit['category'];?><br>
<?php endforeach; ?>
<?php foreach ($category as $categories): ?>
<?php if(!in_array($categories->cat_id,$arrayofcategories)) { ?>
<input type="checkbox" name="cat[]" value="<?php echo $categories->cat_id;?>"><?php echo $categories->category;?><br>
<?php } ?>
<?php endforeach; ?>
在上面的代码中,我们在$arrayofcategories
中保存类别的ID,并检查(在第二个循环中)是否已在第一个循环中找到它们,仅在未找到它们时显示。
答案 1 :(得分:0)
你可以试试这段代码:
<?php
$editCategory = array();
foreach ($editcat as $edit):
$editCategory = $edit['cat_id'];
?>
<input type="checkbox" name="cat[]" checked="checked" value="<?php echo $edit['cat_id'];?>" ><?php echo $edit['category'];?><br>
<?php endforeach; ?>
<?php foreach ($category as $categories): ?>
<?php if (!in_array($categories->cat_id, $editCategory)): ?>
<input type="checkbox" name="cat[]" value="<?php echo $categories->cat_id;?>"><?php echo $categories->category;?><br>
<?php endif: ?>
<?php endforeach; ?>
<br>