2015-09-06 48 views
1

Iam在比较两个数组时遇到了问题。通过两个数组循环 - >标记复选框检查

在第一个数组中,我有行的ID,我需要在其中标记复选框ckecked。在第二个数组中,有一个来自表的项目的完整数据集。

我没有运气,使其正常工作,但 - 这是我的最后一次尝试,这显然不正常工作,因为它做的一切的6倍(如第一个数组包含6种元素)

第一阵列: 阵列(6){ [0] => 串(2) “24” [1] => 串(2) “25” [2] => 串(2) “28” [3 (1)“9” [5] => st环(2) “10” }

$产品 - 6个元件

$数据的阵列 - 数据集的阵列从MySQL

foreach($datas as $data) { 
if(!empty($products)) { 
    foreach($products as $product) { 
     if($product == $data->id) { ?> 
      <tr> 
      <td><input type="checkbox" name="selectedProduct[]" value="<?=$data->id;?>" class="big-checkbox" checked="checked"> 
      <td><?=$data->evidenceId;?></td> 
      <td><?=$data->modelName;?></td> 
      <td><?=$data->size;?></td> 
      <td><?=$data->price;?></td> 
      <td><?=$data->brand;?></td> 
      </tr> 
     <?php } 
     if($product !== $data->id) { ?> 
      <tr> 
      <td><input type="checkbox" name="selectedProduct[]" value="<?=$data->id;?>" class="big-checkbox"> 
      <td><?=$data->evidenceId;?></td> 
      <td><?=$data->modelName;?></td> 
      <td><?=$data->size;?></td> 
      <td><?=$data->price;?></td> 
      <td><?=$data->brand;?></td> 
      </tr> 
     <?php } 
    } 
} 

拉我需要的是,以呈现每行$ data并标记框已选中$ data-> id == $ product

有什么建议? 谢谢! 马丁

编辑:

也试过的方法是这样的,但它只是拧HTML表:

foreach($datas as $data) { 
            foreach($selectedProducts as $product) { 
             if($product == $data->id) { ?> 
              <tr> 
              <td><input type="checkbox" name="selectedProduct[]" value="<?=$data->id;?>" class="big-checkbox" checked="checked"> 
             <?php } 
             if($product !== $data->id) { ?> 
              <tr> 
              <td><input type="checkbox" name="selectedProduct[]" value="<?=$data->id;?>" class="big-checkbox"> 
             <?php } 
            } 
           ?> 

             <td><input type="checkbox" name="selectedProduct[]" value="<?=$data->id;?>" class="big-checkbox"> 
             <td><?=$data->evidenceId;?></td> 
             <td><?=$data->modelName;?></td> 
             <td><?=$data->size;?></td> 
             <td><?=$data->price;?></td> 
             <td><?=$data->brand;?></td> 
            </tr> 
           <?php } ?> 
+0

第一个数组是什么? $ DATAS? –

+0

@ some-non-descript-user:nope,第一个数组是** $ product **。 ** $ datas **是从mysql获取的数据集。 – HyperT

+0

你可以显示'$ datas'的结果吗? – aldrin27

回答

0

如果$产品包含产品ID,您就可以检查一个产品有用in_array()选择。不需要第二个循环。

if(!empty($products)) { 
    foreach($datas as $data) { 
    ?> 
     <tr> 
    <?php 
     if(in_array($data->id, $products) { 
    ?> 
      <td><input type="checkbox" name="selectedProduct[]" value="<?=$data->id;?>" class="big-checkbox" checked="checked"></td> 
    <?php 
     }else{ 
    ?> 
      <td><input type="checkbox" name="selectedProduct[]" value="<?=$data->id;?>" class="big-checkbox"></td> 
    <?php 
     } 
    ?> 
     <td><?=$data->evidenceId;?></td> 
     <td><?=$data->modelName;?></td> 
     <td><?=$data->size;?></td> 
     <td><?=$data->price;?></td> 
     <td><?=$data->brand;?></td> 
     </tr> 

    } 
} 

...并且您的代码没有关闭td标签。

+0

这正是我需要的!谢谢你,哥们。 – HyperT

0

试试这个代码
假设你的产品阵列包含(型号名称,大小......)
和数据阵列包含选定产品的产品ID

<?php 
//collect seelcted IDs 
$selectedIds = array(); 
foreach($datas as $data){ 
    $selectedIds[]=$data->id; 
} 
//now loop through products, and check if current product_id exists (in_array()) in selectedIds echo checked else nothing 
foreach($products as $product) { 
?> 
    <tr> 
     <td><input type="checkbox" name="product_n" value="<?=$product->id;?>" class="big-checkbox" <?php echo (in_array($product->id,$selectedIds?"checked='checked'":"")) ?> > 
     <td><?=$product->evidenceId;?></td> 
     <td><?=$product->modelName;?></td> 
     <td><?=$product->size;?></td> 
     <td><?=$product->price;?></td> 
     <td><?=$product->brand;?></td> 
    </tr> 
<?php 
    } 
?>