如何使用foreach显示多维数组

时间:2014-11-13 05:13:53

标签: php arrays session

enter image description here
以上就是我在我的代码中尝试实现的目标。

* P =产品

以下是我的代码。我需要做的就是显示“ID'以及' qty'使用foreach.Now它只显示键' id'它的价值。

我试过

$_SESSION['items'][]=array('id'=>$id,'qty'=>$qty); 

而不是

 $_SESSION['items']=array('id'=>$id,'qty'=>$qty); 

但我收到此错误:问题:Fatal error: [] operator not supported for string..

PHP

<?php
session_start();
?>
<?php

 $id=$_GET['id'];
 $qty=$_GET['qty'];


$_SESSION['items']=array('id'=>$id,'qty'=>$qty);
print_r($_SESSION['items']);
foreach($_SESSION['items'] as $items=>$value)
{
    echo $items;

    echo $value;


}

?>

编辑:

我设法解决了这个问题。但是现在,我试图在每个产品中加入以上内容。我的意思是,

我得到的数据是这样的:

$id = $_GET['id'];
$qty = $_GET['qty'];
$product_id=$_GET['product_id'];

//在会话

中存储详细信息
$_SESSION['items'][]= array('id'=>$id,'qty'=>$qty,'product_id'=>$product_id);
print_r($_SESSION['items']);
$item_id= explode(',',$_SESSION['items']['id']);
$item_qty= explode(',',$_SESSION['items']['qty']);
$item_product= explode(',',$_SESSION['items']['product_id']);

//从数据库中检索信息

mysql_select_db($database_wedding_conn, $wedding_conn);
$select="SELECT tbl_additional_info.*,tbl_productscontents.* FROM 

tbl_additional_info,tbl_productscontents WHERE tbl_additional_info.productid='$product_id AND tbl_additional_info.product_id=tbl_productscontents.product_id GROUP BY tbl_productscontents.productid'";

$result=mysql_query($select)or die(mysql_error());

这就是它在表格中的显示方式

<table>
    <tr>
        <th>Product</th>
        <th>Size</th>
        <th>Unit Price</th>
        <th>Quantity</th>
        <th>Amount</th>
    </tr>
    <?php
    foreach($item_product as $p=>$p_value)
         {
    ?>
    <tr>
      <td valign="top">
        <?php
        echo $p;
        echo $p_value;
        ?>
      </td>
      <td>
        <table>

        <?php
        foreach($item_id as $i)
         {
             ?>
             <tr>
                <td>
            <?php  echo $i;?>
               </td>
            </tr>
             <?php
         }
        ?>
        </table>
      </td>
      <td>
        <?php
        foreach($item_qty as $q)
         {
             //unit price
            // echo $q;
         }
        ?>
      </td>
      <td>
      <table>

        <?php
        foreach($item_qty as $q)
         {
             ?>
             <tr>
                <td>
            <?php  echo $q;?>
               </td>
            </tr>
             <?php
         }
        ?>
        </table>
      </td>
      <td>
        <?php
        foreach($item_qty as $q)
         {
             //amount
             //echo $q;

         }
        ?>
      </td>
    </tr>
    <?php
        }
    ?>
</table>

问题:如何显示会话中存储的所有产品?每个循环只显示一个产品。它没有添加更多,因为它在print_r中显示($ _ SESSION [&#39; items&#39;])

4 个答案:

答案 0 :(得分:1)

您正在使用的是一个关联数组,它只是一个维度。它是关联的,因为您可以通过关联访问它们,而不是通过索引号(即索引数组)访问它们,该关联是您给它的字符串值(即&#39; id&# 39;和数量&#39;)。

如果您正在尝试输出这些配置的值,则可以在没有foreach循环的情况下执行此操作:

echo $_SESSION['items']['id'];
echo $_SESSION['items']['qty'];

你在这里做的是说: &#34;在关联数组$_SESSION中,为我提供键items的值,然后在其关联数组中为我提供键id。重复相同但给我键qty&#34;

修改

因此,如果您期望包含数组值的查询字符串,例如:

http://example.com?id[]=1&id[]=2&qty[]=10&qty[]=20

您可以使用for循环而不是foreach访问值:

<?php

 $id=$_GET['id'];
 $qty=$_GET['qty'];

for($i=0;$i < count($id) ; $i++){
   echo "ID: " . $id[$i] . " has QTY: " . $qty[$i] . "<br />";
}

?>

这假设您始终具有与qty值相同数量的id值,但您可以添加逻辑来处理不均匀的分组。

答案 1 :(得分:1)

对于这种类型的分配

$_SESSION['items'][]=array('id'=>$id,'qty'=>$qty); 

使用嵌套的foreach,

foreach($_SESSION['items'] as $items=>$values)
{
    foreach($values as $item=>$value)
    {
        echo $item.": ";
        echo $value."\n";
    }
}

输出示例:

id: test_id
qty: test_qty

对于第二个问题,使用类似下面的foreach而不是explode它将为视图或数据库查询迭代提供干净的数组。

$item_product = array();
$item_id = array();
$item_qty = array();
foreach($_SESSION['items'] as $items=>$values)
{
    foreach($values as $item=>$value)
    {
        if($item == 'id');
            $item_id[] = $value;

        else if($item == 'qty');
            $item_qty[] = $value;

        else if($item == 'product');
            $item_product[] = $value;
    }
}

答案 2 :(得分:1)

如果您想显示值多维数组,那么代码下面的代码是有用的 但是没有必要为每个循环Kalaivani。     

如果你想显示来自数据库或多个记录的数据,那么foreach循环是有用的,参见下面的例子

  <?php 

  $sql="write here your select query and pass record to $sql";//pass multiple value from database

                       **OR**

  $sql= array('id'=>$id,'qty'=>$qty);//pass multiple value from array
  session_name("items");
  $id=$_GET['id'];
  $qty=$_GET['qty'];
  $_SESSION["items"]["id"]=$id;
  $_SESSION["items"]["qty"]=$qty;
  print_r($_SESSION["items"]);
 ?>

答案 3 :(得分:0)

这应该有效:

<?php

    session_start();

    //temp
    $_GET['id'] = 7;
    $_GET['qty'] = "test";

    $id = $_GET['id'];
    $qty = $_GET['qty'];

    $_SESSION['items'] = array('id'=>$id,'qty'=>$qty);

    foreach($_SESSION['items'] as $k => $v) 
        echo "Key: " . $k . " Value: " . $v . "<br />";

?>

输出:

Key: id Value: 7
Key: qty Value: test