2012-10-10 108 views
0

我填充$ _SESSION [“产品”]数组从一个文件:PHP设置和循环关联数组

$myFile = '.\products.txt'; 
$handle = fopen($myFile, 'r'); 

while (!feof($handle)) 
{ 
    $prod = explode('|', fgets($handle)); 

    $_SESSION['products'] = array($prod[4] => array(
      'name' => $prod[0], 
      'price' => $prod[1], 
      'description' => $prod[2], 
      'image' => $prod[3])); 
} 

然后我想通过它循环,打印所有名称和价格:

foreach ($_SESSION['products'] as $prodID=>$value) { 
    echo $_SESSION['products'][$value]['name']; 
    echo $_SESSION['products'][$value]['price']; 
} 

但它似乎并没有工作!

+0

'print_r($ _ SESSION ['products'])''的输出是什么? –

+0

'Array([ylbulb] => Array([name] => 60W Yellow Bulb [price] => 7.95 [description] => Yellow Bulb description ... [image] => ylbulb.png))'没有被加载到数组中! – antikbd

+0

使用MrCode的答案。 –

回答

3

你的问题是,在这里要覆盖的产品阵列,每一个产品,这意味着只有将永远是最后的产品存在:

$_SESSION['products'] = array($prod[4] => array(

尝试附加像数组:

$_SESSION['products'][$prod[4]] = array(
//     ^^^^^^^^ set the key as the product ID here 
     'name' => $prod[0], 
     'price' => $prod[1], 
     'description' => $prod[2], 
     'image' => $prod[3]); 

而且你的foreach是错误的,尽量

foreach ($_SESSION['products'] as $prodID=>$value) { 
    echo $value['name']; 
    echo $value['price']; 
} 
+0

谢谢,但这是行不通的。它给出了一个未定义的索引错误,似乎将索引乘以每个页面刷新。 – antikbd

+0

当然,如果你一次又一次地调用这个代码,它会复制带有页面刷新的数组。 '$ _SESSION'数据在页面中持续存在,您应该只从文件中填充一次数组。 – MrCode

+0

好的谢谢!我想通了......但是我仍然无法打印任何东西,由于未定义的索引错误 – antikbd

0
foreach ($_SESSION['products'] as $prodID=>$value) { 
    echo $_SESSION['products'][$prodID]['name']; 
    echo $_SESSION['products'][$prodID]['price']; 
} 
4

你需要知道如何再次检查foreach作品。你的情况,你可以简单地做到以下几点:

foreach($_SESSION['products'] as $value) { 
    echo $value['name']; 
    echo $value['price']; 
} 
+0

谢谢。但它只打印最后一个项目。出于某种原因,文本文件中的所有项目都未加载到$ _SESSION ['products']数组中! – antikbd

+0

查看MrCode的答案。 –