我有一个名为C.txt的文本文件。文本文件的内容如下:
名称,BPrice,SPrice,显示 诺基亚520,20000,21000,1 Xiaomi123,15000,17000,0 小米红米,30000,32000,1
我使用以下代码访问了该文件:
<?php
$file = fopen("C.txt", "r");
while(!feof($file)){
$content = fgets($file);
$products[] = $content;
}
var_dump($products);
?>var_dump($products)提供输出:
数组(4){ =>字符串(33)“名称,BPrice,SPrice,显示”1=> string(29)“Nokia520,20000,21000,1”2=> string(29) "Xiaomi123,15000,17000,0“3=> string(30)”小米红米,30000,32000,1“}
我想要做的是使用BPrice方法分隔名称、SPrice和显示列及其值。因此,我尝试了以下几点:
<?php
for($i=1; $i<count($products); $i++){
$contents[] = explode(",", $products[$i]);
}
var_dump($contents);
?>var_dump($contents)产量:
数组(3){ =>数组(4){ =>字符串(9)“nokia520”1=>字符串(6)“20000”2=>字符串(6)“21000”3=>字符串(5)“1”} 1=>数组(4){ => string(9) "Xiaomi123“1=> string(6)”15000“2=> string(6)”17000“3=> string(5)”0“2=> (4){ => string(12 )=>string(12)1=> string(6)”15000“2=> string(6)”17000“3=> string(5)”0“2=>(4))“小米红米”1=>字符串(6)“30000”2=>字符串(6)“32000”3=>字符串(3)“1”}
注意:我只想访问列的值,而不访问标题,因此需要访问for($i=1; $i<count($products); $i++)。
现在我面临的问题就在这里。如何访问这个二维数组$contents
我尝试了以下foreach loop:
foreach ($contents as $key => $value) {
echo $value[$key];
}但结果是:
诺基亚520 15000 32000
我似乎不明白为什么不打印这两行的其余部分!任何帮助都将是非常感谢的。谢谢!)
发布于 2017-11-13 19:45:23
您的问题在echo $value[$key];中。此上下文中的$key变量包含当前$contents数组成员的键,而您正在使用它访问内部数组的值,即产品数据。
由于这是一个多维数组,您将需要多个循环来打印出来。所以如果你想这样做的话,它会是这样的:
foreach ($contents as $productValues) {
foreach ($productValues as $productValue) {
echo $productValue;
}
echo PHP_EOL;
}发布于 2017-11-13 19:46:15
尝试使用此函数将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
)
)发布于 2017-11-13 19:49:03
数组的可读性更强,如下所示
[["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和2 of ["Nokia 520", "20000", "21000", "1"],它们是Nokia 520、20000和21000的值。
要获得实际需要的值,需要执行两个foreach循环
foreach ($arr as $keys) {
foreach($keys as $value) {
echo "{$value} ";
}
echo "\n";
}https://stackoverflow.com/questions/47272170
复制相似问题