PHP - 在循环中操作csv中的数据

问题描述:

我正在开发一个项目,我需要访问包含csv格式数据的.dat文件,然后使用该文件为虚构的电子商务网站创建产品页面。我已经做到了,让我有正确数量的图像/信息显示出来,但不能操纵数组,以便我可以呈现它的特定部分。PHP - 在循环中操作csv中的数据

我.dat文件看起来是这样的:

1001,Logitech G703,Wireless gaming mouse,$99.99,mouse.jpg 
1002,Microsoft Keyboard,Bluetooth mechanical keyboard,$59.99,keyboard.jpg 
1003,Bose Speaker,Teal wireless surround sound speaker,$159.99,speaker.jpg 
1004,KickSTART,Grape flavored Mountain Dew KickSTART,$1.49,kickstart.jpg 
1005,Google Pixel,Google's first real smartphone,$799.99,pixel.jpg 
1006,Canon EOS REBEL,24.2 Megapixel,$849.00,canon.jpg 
1007,Surface Pro 4,128GB 4GB RAM Intel Core i5=>$698.99,surface.jpg 
1008,Luna,Siberian Husky Female,$999999.99,luna.jpg 
1009,Loki,Siberian Husky Male,$999999.99,loki.jpg 
1010,Coffee Mug,"This coffee is making me awesome!",$5.00,mug.jpg 

而且它的其余部分是这样的:

<?php 

$data = file('products.dat'); 


foreach ($data as $products){   
    $i++; 
    $dataExplode = explode(",", $products[$i]); 
?> 
    <div class="product"> 
    <image class="product_image" src="img/loki.jpg"> <?php print $products; ?> 
    <br>$20.99 
    <form method="post" action="viewcart.php?action=add&code=<?php echo 
    $product_array[$key]["code"]; ?>"> 
    <div><input type="text" name="quantity" value="1" size="2" /><input 
    type="submit" value="Add to cart" class="btnAddAction" /></div> 

    </div> 
<?php }; ?> 

当使用打印在$我的foreach循环内的产品,将显示产品信息按顺序排列,就像我想要的,但我无法缩小它的范围,并使用以逗号分隔的字符串。此外,我需要能够显示与每个产品相关的图像,但无法找到适用于此的工作方法。

我很感谢帮助和建议!

+1

这个1007行在价格之前真的有'=>'而不是逗号吗?那是怎么发生的? –

+0

'$ product_array [$ key] [“code”]'$ product_array'和'$ key'定义在哪里?你尝试过使用['str_getcsv()'](http://php.net/manual/en/function.str-getcsv.php)吗? –

+0

'$ dataExplode = explode(“,”,$ products);'(no [$ i] there),then use the array:'src =“img/”> ' – Jeff

您不需要在产品数组中指定$ i,即指向每列而不考虑行。

您需要按行\n爆炸,然后用逗号分隔每行(产品)。

当你拿一行产品并将其爆炸时,它就成为一个数组。

$data= file('products.dat'); 

foreach ($data as $line){ 
    $product = explode(",",$line); 
    $id = $product[0]; 
    $title = $product[1]; 
    $price = $product[2]; 
    $description = $product[3]; 
    $image = $product[4]; 
} 

希望这会有所帮助。

+1

好吧,用'file()'开头是正确的。在这里不需要使用'file_get_contents'和'explode'。 [手册](http://php.net/manual/en/function.file.php) – Jeff

+0

谢谢@Jeff我已经更新了我的答案。 –

+0

是的,但错了....爆炸需要消失...只是'$ data = file('products.dat');' – Jeff