我有一个包含两行数据的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");