【问题标题】:PHP - Manipulating data from csv in a loopPHP - 在循环中操作来自 csv 的数据
【发布时间】:2018-03-31 23:37:53
【问题描述】:

我正在做一个项目,我需要访问一个 .dat 文件,其中包含我的 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 循环中对 $products 使用 print 时,它会按我想要的顺序显示产品信息,但我无法缩小范围并使用以逗号分隔的字符串。此外,我需要能够显示与每个产品相关联的图像,但也无法为此找到工作方法。

感谢您的帮助和建议!

【问题讨论】:

  • 那1007行真的有=&gt;而不是价格前的逗号吗?这是怎么发生的?
  • $product_array[$key]["code"] $product_array$key 定义在哪里?您是否尝试过使用str_getcsv()
  • $dataExplode = explode(",", $products);(没有 [$i] 那里),然后使用该数组:src="img/&lt;?php echo $dataExplode[4]; ?&gt;"&gt;
  • 如果您执行var_dump($dataExplode),您会看到在哪里可以找到哪些信息。
  • @Don'tPanic,我正在试验我的 csv 文件,看看是否能以某种方式将其转换为关联数组,但它并没有真正适合我。

标签: php csv multidimensional-array foreach


【解决方案1】:

您不需要在 products 数组中指定 $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];
}

希望这会有所帮助。

【讨论】:

  • 嗯,开头使用file() 是正确的。无需在那里使用file_get_contentsexplodemanual
  • 是的,但是错了......爆炸需要消失......只是$data = file('products.dat');
  • 谢谢@Jeff,我不知道file()第一次自动爆炸了。
  • 谢谢!这对我有用。我在没有使用 foreach 方法的情况下以单独的更手动的方式完成了此操作,但花费的时间太长了。
猜你喜欢
  • 2013-08-15
  • 1970-01-01
  • 2011-01-30
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
相关资源
最近更新 更多