数组中的数组和foreach警告

时间:2014-04-23 12:09:28

标签: php arrays foreach

我有以下数组,由$_SESSION

生成
array(1) { ["products"]=> &array(4) 
                { ["prod_count"]=> int(2) 
                           [0]=> array(1) { ["product_id"]=> int(4)}
                           [1]=> array(1) { ["product_id"]=> int(10) } 
                           [2]=> array(1) { ["product_id"]=> int(11) } } }

我尝试使用foreach对其进行排序。

<?php foreach($_SESSION['products'] as $key=>$my_value): ?>

   <?php foreach($my_value as $product_id): ?> 
     <?=$product_id?>   
   <?php endforeach; ?>

<?php endforeach; ?>

它工作正常,我得到了product_id,但它也给了我警告:

Warning: Invalid argument supplied for foreach() in /books_shop/templates/cart.php on line 6

就是这一行:

 <?php foreach($my_value as $product_id): ?> 

知道我在这里缺少什么吗?任何帮助将受到高度赞赏。

3 个答案:

答案 0 :(得分:0)

这是因为并非会话中的所有值都是数组,请确保它是一个数组,然后才能在使用in_array的foreach循环中使用它,

<?php foreach($_SESSION['products'] as $key=>$my_value): ?>    
   <?php if(is_array($my_value )) { 
            foreach($my_value as $product_id): ?> 
     <?=$product_id?>   
   <?php endforeach;  }  ?>    
<?php endforeach; ?>

首选代码结构

if(is_array($my_value )) { 
    foreach($my_value as $product_id): 
       echo $product_id;
    endforeach;
}    

答案 1 :(得分:0)

在将$my_value传递给foreach之前,您应该先检查一下

if (is_array($my_value)) {

  foreach ($my_value as $product_id) {
   //your code here
  }
}

答案 2 :(得分:0)

['products']中的第一个元素是"prod_count"=> 2,它不是数组。 试试这个:

  <?php foreach($_SESSION['products'] as $key=>$my_value){ ?>
       <?php if($key == 'prod_count') continue; ?>

       <?php if(is_array($my_value)): ?>
           <?php  foreach($my_value as $product_id): ?> 
               <?=$product_id?>   
           <?php endforeach; ?>
       <?php endif; ?> 
    <?php }; ?>