【问题标题】:Checking a checkbox based on array value?根据数组值检查复选框?
【发布时间】:2012-08-22 00:21:20
【问题描述】:

我目前有两个如下所示的数组:

色板:

Array
(
    [0] => Array
        (
            [swatch_id] => 8
            [swatch_file] => orange_swatch.jpg
        )

    [1] => Array
        (
            [swatch_id] => 9
            [swatch_file] => pink_swatch.jpg
        )

    [2] => Array
        (
            [swatch_id] => 10
            [swatch_file] => green_swtach.jpg
        )

)

选定的色板:

Array
(
    [0] => Array
        (
            [swatches_has_products_id] => 18
            [swatches_swatch_id] => 8
            [products_product_id] => 19
        )

    [1] => Array
        (
            [swatches_has_products_id] => 19
            [swatches_swatch_id] => 10
            [products_product_id] => 19
        )

)

如果$swatch['swatch_id'] 等于$selected_swatches['swatches_swatch_id'],我正在尝试选中一个复选框。我正在使用以下代码执行此操作:

<?php foreach ($swatches as $k => $swatch): ?>
    <li>
        <img src="<?php echo base_url(); ?>media/images/swatches/<?php echo $swatch['swatch_file']; ?>" height=""/>
        <input type="checkbox" name="product_has_swatch[]" value="<?php echo $swatch['swatch_id']; ?>" <?php    if($swatch['swatch_id'] == $selected_swatches[$k]['swatches_swatch_id']) : ?> checked="checked" <?php endif; ?> />
    </li>
<?php endforeach; ?>

但是,如果没有匹配项,我会收到以下错误:

A PHP Error was encountered
   Severity: Notice
    Message: Undefined offset: 2
   Filename: products/create.php
Line Number: 137

第 137 行是if,用于检查我是否有匹配项;我哪里错了?

【问题讨论】:

    标签: php arrays checkbox foreach


    【解决方案1】:

    一种解决方案是:

    // make a new array of selected ids
    $newArr = array();
    foreach($selected_swatches as $val) {
        array_push($newArr, $val['swatches_swatch_id']);
    }
    
    // then check with in_array, like:
    <?php foreach ($swatches as $k => $swatch): ?>
        <li>
            <img src="<?php echo base_url(); ?>media/images/swatches/<?php echo $swatch['swatch_file']; ?>" height=""/>
            <input type="checkbox" name="product_has_swatch[]" value="<?php echo $swatch['swatch_id']; ?>" <?php if(in_array($swatch['swatch_id'], $newArr)) : ?> checked="checked" <?php endif; ?> />
        </li>
    <?php endforeach; >
    

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      因为您在 Selected Swatches 数组中没有索引 2。这就是为什么它会通知您。

      【讨论】:

        【解决方案3】:
        **Check this out it works fine**
        
        $swatches           = array( 0 =>array('swatch_id'=>8,'swatch_file'=>'orange_swatch.jpg'),
                                     1 => array('swatch_id'=>9,'swatch_file'=>'ping_swatch.jpg'),
                                     2 =>array('swatch_id'=>10,'swatch_file'=>'green_swatch.jpg')
                                   );
        $selected_swatches  = array( 0 =>array('swatches_has_products_id'=>18,'swatches_swatch_id'=>8,'products_product_id'=>19),
                                     1 =>array('swatches_has_products_id'=>19,'swatches_swatch_id'=>10,'products_product_id'=>19),
        
                                    );               
        
        foreach($swatches as $k=>$swatch) :
        
            ?>
        
        <li>
        
         <input type="checkbox" name="product_has_swatch" value="<?php echo $swatch['swatch_id'];?>"
        
         <?php 
              if($swatch['swatch_id'] == $selected_swatches[$k]['swatches_swatch_id']):
                      echo "checked = 'checked'";
              endif;
          ?>
        
        
         />
        </li>
        <?php endforeach; ?>
        

        【讨论】:

          猜你喜欢
          • 2013-03-09
          • 1970-01-01
          • 2020-08-23
          • 1970-01-01
          • 2012-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-08
          相关资源
          最近更新 更多