【问题标题】:How to set selected properties in multiple checkboxes with foreach loop in PHP?如何在 PHP 中使用 foreach 循环在多个复选框中设置选定属性?
【发布时间】:2019-01-30 15:57:12
【问题描述】:

我想显示所有类别,并且我想将选定的属性设置为多个复选框。

<div class="col-md-10">
<?php 

$allCategories = $category->getAllCategory();

if ($allCategories) {

$categoryAccess = $category_permitted->getCategoriesByUserId($user_info[0]->id);

foreach ($allCategories as $key => $items) {
    if ($categoryAccess) {
        foreach ($categoryAccess as $key => $value) {
            ?>
            <input type="checkbox" name="cat_access[]" value=" <?php echo $items->id ?> " <?php echo (isset($categoryAccess) && @$categoryAccess[$key]->id == $items->id) ? 'checked' : '' ?>><?php echo $items->title?>
            <?php
        }
    }

    ?>

    <?php
}
}
 ?>
    </div>

循环通过$categoryAccess 后,我选择了两个选项,但我让所有类别重复两次作为输出,即 category1 类别 1 类别 2 类别 3 类别 3 类别 4 类别 4。

我有 4 个具有复选框的类别,对于输出,应选中其中的 2 个类别。我在&lt;?php echo (isset($categoryAccess) &amp;&amp; $categoryAccess-&gt;id == $items-&gt;id) ? 'selected' : '' ?&gt; 中遇到错误,它给出了这个错误:尝试获取非对象的属性“id”,当我做&lt;?php echo (isset($categoryAccess) &amp;&amp; $categoryAccess[0]-&gt;id == $items-&gt;id) ? 'selected' : '' ?&gt; 时,它给出了数据,但只有 0 索引。

var_dump($categoryAccess)

array(2)
{
    [0]=> object(stdClass)#6 (3)
    {
        ["id"]=> string(1) "1"
        ["user_id"]=> string(1) "2"
        ["title"]=> string(25) "category1"
    }
    [1]=> object(stdClass)#20 (3)
    {
        ["id"]=> string(1) "3"
        ["user_id"]=> string(1) "2"
        ["title"]=> string(18) "category2"
    }
}

【问题讨论】:

  • var_dump($categoryAccess);的结果
  • 制作一个 $categoryAccess 的 var_dump 以查看您实际处理的内容。
  • $categoryAccess 是一个数组,您不能使用对象运算符-&gt; 访问它的属性。您应该遍历 $categoryAccess 以访问其对象
  • 除了你的错误,你真的应该在循环之外调用getCategoriesByUserId(),而不是在循环内部,因为它不依赖于$items。当您每次都将获得相同的结果时,没有理由每次都浪费资源/时间调用它。
  • @PatrickQ 我已经更正了我的代码。

标签: php checkbox foreach


【解决方案1】:

试试这个:

<?php

$allCategories = $category->getAllCategory();
$categoryAccess = $category_permitted->getCategoriesByUserId($user_info[0]->id);

foreach ($allCategories as $items) {

  $checked = '';    

  foreach ($categoryAccess as $value) {

    if($items->id == $value->id){
      $checked = 'checked';
      break;
    } 
  }
  ?>

  <input type="checkbox" name="cat_access[]" value="<?php echo $items->id ?>" <?php echo $checked ?>>
  <?php echo $items->title?>

  <?php
}
?>

【讨论】:

  • 在使用您共享的代码后出现两个错误,即 Undefined offset: 3 和 Trying to get property 'id' of non-object。
  • David : $categoryAccess[$key]确定 $categoryAccess$key 作为索引吗?
  • @Cid $categoryAccess 将 $key 作为索引,当我执行 print_r($categoryAccess) 时,它会给出一个包含两个索引 0 和 1 的数组。
  • @Alisha $allCategories 中有多少项目?
  • @Cid $allCategories 中有 4 项。
猜你喜欢
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 2013-11-29
相关资源
最近更新 更多