我有一个名为 C.txt 的文本文件。文本文件的标记如下:
名称,BPrice,SPrice,显示
诺基亚520,20000,21000,1 小米123,15000,17000,0 Xiaomi Redmi,30000,32000,1
我使用以下代码访问了该文件:
<?php
$file = fopen("C.txt", "r");
while(!feof($file)){
$content = fgets($file);
$products[] = $content;
}
var_dump($products);
?>
var_dump($products)
给出输出:
array(4){[0] =&gt; string(33)“Name,BPrice,SPrice,Display”[1] =&gt; string(29)“Nokia 520,20000,21000,1”[2] =&gt; string(29)“Xiaomi123,15000,17000,0”[3] =&gt; string(30)“Xiaomi Redmi,30000,32000,1”}
我想要做的是分离名称, BPrice , SPrice 和显示列他们的值使用explode()
方法。所以,我尝试了以下内容:
<?php
for($i=1; $i<count($products); $i++){
$contents[] = explode(",", $products[$i]);
}
var_dump($contents);
?>
var_dump($contents)
收益:
array(3){[0] =&gt; array(4){[0] =&gt; string(9)“Nokia 520”[1] =&gt; string(6)“20000”[2] =&gt; string(6)“21000”[3] =&gt; string(5)“1”} [1] =&gt; array(4){[0] =&gt; string(9)“Xiaomi123”[1] =&gt; string(6)“15000”[2] =&gt; string(6)“17000”[3] =&gt; string(5)“0”} [2] =&gt; array(4){[0] =&gt; string(12)“Xiaomi Redmi”[1] =&gt; string(6)“30000”[2] =&gt; string(6)“32000”[3] =&gt; string(3)“1”}}
注意:我只想访问列的值而不是标题,因此for($i=1; $i<count($products); $i++)
现在我正面临这个问题。如何访问此二维数组$contents
?
我尝试了以下foreach loop
:
foreach ($contents as $key => $value) {
echo $value[$key];
}
但结果是:
诺基亚520 15000 32000
我似乎无法弄明白为什么它不打印两行的其余部分!任何帮助都将不胜感激。提前致谢! :)
答案 0 :(得分:0)
您的问题出在echo $value[$key];
。
此上下文中的$ key变量保存当前$contents
数组成员的键,而您使用它来访问内部数组的值,即产品数据。
由于这是一个多维数组,因此需要多个循环才能将其全部打印出来。所以,如果你想这样做,它会像这样工作:
foreach ($contents as $productValues) {
foreach ($productValues as $productValue) {
echo $productValue;
}
echo PHP_EOL;
}
答案 1 :(得分:0)
尝试使用此函数将cvs文件解析为关联数组,其列名为数组键:
function csvArray($file) {
$csv = array_map('str_getcsv', file($file));
array_walk($csv, function(&$a) use ($csv) {
$a = array_combine($csv[0], $a);
});
array_shift($csv);
return $csv;
}
然后是
的结果$phones = csvArray('c.txt');
print_r($phones);
时:
Array
(
[0] => Array
(
[Name] => Nokia 520
[ BPrice] => 20000
[ SPrice] => 21000
[ Display] => 1
)
[1] => Array
(
[Name] => Xiaomi123
[ BPrice] => 15000
[ SPrice] => 17000
[ Display] => 0
)
[2] => Array
(
[Name] => Xiaomi Redmi
[ BPrice] => 30000
[ SPrice] => 32000
[ Display] => 1
)
)
答案 2 :(得分:0)
你的数组用更易读的术语看起来像这样
[["Nokia 520", "20000", "21000", "1"],
["Xiaomi123", "15000", "17000", "0"],
["Xiaomi Redmi", "30000", "32000", "1"]]
这意味着在您的foreach
中,第一个键的值是
["Nokia 520", "20000", "21000", "1"]
你只是获得这些价值的原因是你正在做的
echo $value[$key];
基本上,您要返回0
的{{1}} 1
和2
个职位,这些职位是["Nokia 520", "20000", "21000", "1"]
,Nokia 520
和{{ 1}}
要获得您真正想要的值,您需要执行两个foreach循环
20000