php csv 到数组

问题描述 投票:0回答:4

我对 php 相当陌生,是从堆栈溢出问题中得到这个的,但似乎无法让它为我工作。

<?php
if (($handle = fopen("fullbox.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    echo "<pre>".print_r($data)." <br /></pre>";
}
fclose($handle);
}
echo $data[1];
?>

我需要设置几个数组来使用大量产品进行定价(我可以从我的 csv 文件中提取)Fullbox.csv 仅包含 10 个数字和 2 个小数位。我刚刚尝试对此进行测试,这是我得到的输出:

数组 ( [0] => 8.53 )

数组 ( [0] => 4.74 )

数组 ( [0] => 5.00 )

数组 ( [0] => 2.50 )

数组 ( [0] => 6.48 )

数组 ( [0] => 3.99 )

数组 ( [0] => 8.53 )

数组 ( [0] => 4.74 )

数组 ( [0] => 8.53 )

数组 ( [0] => 4.74 )

为什么数组将所有值设置在数组的 [0} 占位符中,以及为什么每行之间有一个 1。预先感谢。

更新 如果这是一个十项数组,则应返回数组中第 1 个条目的值,但事实并非如此。我基本上只需要存储所有价格,以便稍后可以将它们用作变量。我不需要打印它们。再次感谢。

echo $data[1];
php arrays csv
4个回答
2
投票

print_r
默认不返回格式化的数组;它输出它并返回
1
。传递
true
作为第二个参数。

echo "<pre>".print_r($data, true)." <br /></pre>";

所有值都位于数组的

0
索引中,因为数组从
0
开始。那里没有什么问题。


1
投票

试试这个:

$f = fopen(yourfile, "r");
$fs = filesize(yourfile);
$content = fread($f, $fs);

$lines = explode("\n", $content);
$result = array();
foreach($lines as $line) $result[] = explode(",", $line);

0
投票

逗号分隔值中的 CSV 是每行一个数组。所以每一行 - 即使它只有 1 个值 - 都是数组。

你也不需要回显“print_r”。


0
投票

您还可以使用以下函数从 CSV 读取数据,并使用 usort() 函数进行排序。

 Read data from the CSV

function readCSV() {
 $csv = array_map('str_getcsv', file('data.csv'));
 array_shift($csv); //remove headers
 $csvData = splitandSort($csv);
 createCSV($csvData);
}
© www.soinside.com 2019 - 2024. All rights reserved.