在 PHP 中从 CSV 检索数据



我有一个包含两行数据的CSV文件,一行用户将输入,另一行将被返回。 例如,输入将在CSV文件中找到的帖子/邮政编码,应返回下一个单元格中的数据。

<?php

function csv_to_array($filename='bn.csv', $delimiter=',')
{
if(!file_exists($filename) || !is_readable($filename))
return FALSE;
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE)
{
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
{
if(!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
fclose($handle);
}
return $data;
}
function search($data, $x) {
for($i = 0; $i < sizeof($data); $i++) {
if($data[$i] == $x) return $i;
}

return -1;
}

$data = array("bn.csv");

echo search($data, "BN1 1AA");
print_r(csv_to_array('bn.csv'));
?>

目前我刚刚返回 -1,我该怎么办?

提前谢谢。

$data = array("bn.csv");创建一个数组,其中包含文本字符串bv.csv。我猜你想在这里$data = csv_to_array("bn.csv");。 我会像这样构建一个关联数组:

$data = [
'BN1 1AA' => 'E05002432',
'...' => '...',
'...' => '...',
];

通过类似的东西:

while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
$data[$row[0]] = $row[1];
}

因此,您可以直接通过其键引用条目,而无需遍历每个项目来搜索匹配项:

$search = 'BN1 1AA';
if (array_key_exists($search, $data)) {
echo $data[$search];
} else {
echo "not found";
}

代码末尾有几个问题。

search()- 您正在尝试将邮政编码与$data[$i] == $x中的整行匹配,$data[$i]实际上是行中字段的列表,因此可能将其与($data[$i][$field] == $x)匹配,$field是邮政编码的字段名称。

您正在使用数据的文件名数组而不是文件中的数据来调用search(),因此此代码首先调用csv_to_array()并将结果传递给search()...

最后 - 示例数据中没有BN1 1AA,因此应返回 -1。

function search($data, $x, $field = 'Postcode') {
for($i = 0; $i < sizeof($data); $i++) {
if ($data[$i][$field] == $x) 
return $i;
}
return -1;
}
$data = csv_to_array('a.csv');
print_r($data);
echo search($data, "BN1 1AD");

最新更新