php读取产品数据txt文件

时间:2009-08-03 06:39:49

标签: php file text-files

我有一个包含产品数据的.txt文件,我想在php中阅读。每行包含一个产品,产品详细信息(编号,名称和价格)由选项卡分隔。正如您在下面所看到的,由于产品名称的长度不同,因此价格垂直对齐并不总是正确的。数据如下所示:

ABC001  an item description   $5.50
XYZ999  an other item    $6
PPP000  yet another one  $8.99
AKA010  one w a longer name   $3.33
J_B007  a very long name, to show tabs  $99

(我不知道如何显示标签,所以它们在上面的示例中是空格,但在真实文件中,它是真正的标签)

最有效的方法是什么? (顺便说一下,它是一个远程文件)我希望有一个包含每个产品的产品数据的数组:

$product['number'], $product['name'] and $product['price']

非常感谢!

4 个答案:

答案 0 :(得分:3)

您可以逐行读取文件(例如,使用函数file,它将使每行进入数组的一行)。

然后,在每一行上使用explode来分隔字段:

$data_of_line = explode("\t", $string_line);

使用“\t”(制表“)作为分隔符。

然后,您$data_of_line[0]包含号码,$data_of_line[1]名称和$data_of_line[2]价格。

答案 1 :(得分:2)

1)最简单的方法是使用file()将所有行加载到数组中(除非文件非常大,然后我会考虑另一种方法)。

2)按标签分割每一行(“\ t”字符)

3)根据需要“格式化”数组列。

示例代码段:

$productsArray = file($productsFileName, FILE_IGNORE_NEW_LINES);

foreach ($productsArray as $key => &$product) {
    $arr = explode("\t", $product);
    $product = array('number' => $arr[0], 'name' => $arr[1], 'price' => $arr[2]);
}

var_dump($productsArray);

答案 2 :(得分:2)

fgetcsv()是一个很好的功能

查看示例 http://us3.php.net/manual/en/function.fgetcsv.php,这是一个稍微修改过的版本:

$products = array();
$handle = fopen("products.txt", "r");

while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
    $products[] = array(
        'number' => $data[0],
        'name' => $data[1],
        'price' => $data[2]
    );
}
fclose($handle);

答案 3 :(得分:1)

$fileArr = file('path.to.your.file.txt');

$productsData = array();

for ($i = 0; $i < count($fileArr); $i++) {
    $lineData = preg_match('/^(\w{3}\d{3})\s+(.*)\s+\$(\d+(\.\d+))$/', $fileArr[$i], $matches);
    $productsData[] = array(
        'number' => $matches[1],
        'name' => $matches[2],
        'price' => $matches[3]
    );
}

使用爆炸会慢一些,但它也可以解析只有一个标签作为值之间的分隔符的文件。另外,您不必从价格中删除$符号。如果你不想用价格保持$,那么你应该使用这个正则表达式:

'/^(\w{3}\d{3})\s+(.*)\s+(\$\d+(\.\d+))$/'