如何根据关键字输入搜索 CSV 文件和 return 多个条目
How to search a CSV file and return multiple entries based on keyword input
您好,我有一个 CSV 文件,其中包含名称、扩展名和单元格。一些用户既有分机又有手机号码。我正在尝试在我们的 Intranet 页面上创建一个搜索,用户将在其中输入关键字(名称、分机或单元格),然后 return 所有包含该关键字的结果。我使用 fgetcsv 读取了一个 CSV 文件,但我只能 return 扩展。如果我搜索姓名或手机号码,它会 return 一个空白的白页。这是我的代码:
$value = $_POST["search"];
$file = 'phonelist/PhonelistCSV2.csv';
while (($data = fgetcsv($file)) !== FALSE){
//print_r($data); - this was just a test to see the data printing out. It prints the entire CSV
print_r(array_keys($data,$value));
}
fclose($file);
经过一整天的谷歌搜索并试图让它工作后,我放弃了 fgetcsv。现在我正在尝试获取 CSV 并将其编码为 JSON with
$csv=file_get_contents($file); $array=array_map("str_getcsv", explode ("\n",$csv));
$json=json_encode($array);
我打印了 json 数组来验证内容是否与 csv 相同。我创建了一个 javascript 函数来搜索关键字。我正在测试将值放入 div 只是为了测试目的,但我无法使该功能正常工作
$value = $_POST["search"];
$keyword=json_encode($value);
<script type="text/javascript">
function search(keyword){
return json.filter(({name, ext, cell}) => {
return name.toLowerCase().indexOf(keyword.toLowerCase()) > -1 ||
ext.toLowerCase().indexOf(keyword.toLowerCase()) > -1 ||
cell.toLowerCase().indexOf(keyword.toLowerCase()) > -1
})
}
document.getElementById('test').innerHTML = json; // I tried it this way and
alert(search($keyword);
</script>
<div id="test"></div>
长话短说,我需要一些帮助来为我的内部网创建搜索以搜索包含名称、分机号和手机号码的 CSV 办公室目录。到目前为止,在我尝试过的解决方案中,我只能 return 分机号码。我希望它的功能类似于搜索“Tim”,return 所有名字中带有 Tim 的人及其后续扩展名、单元格 # 或两者。
您可以只对名称等内容进行不区分大小写的搜索,并相应地过滤您的记录。
第一部分只是将 csv 数据放入数组中。
<?php
$data =<<<DATA
Neil Buchanan,334,012345678
Tony Hart,314,01234828828
Henri Matisse,392,01234457575
DATA;
$data = array_map('str_getcsv', preg_split('/\R/',$data));
$name_search = function($keyword) use ($data) {
return array_filter($data, function($line) use ($keyword) {
return stristr($line[0], $keyword);
});
};
$results = $name_search('to');
var_export($results);
echo "Next Search\n";
$results = $name_search('he');
var_export($results);
输出:
array (
1 =>
array (
0 => 'Tony Hart',
1 => '314',
2 => '01234828828',
),
)Next Search
array (
2 =>
array (
0 => 'Henri Matisse',
1 => '392',
2 => '01234457575',
),
)
您好,我有一个 CSV 文件,其中包含名称、扩展名和单元格。一些用户既有分机又有手机号码。我正在尝试在我们的 Intranet 页面上创建一个搜索,用户将在其中输入关键字(名称、分机或单元格),然后 return 所有包含该关键字的结果。我使用 fgetcsv 读取了一个 CSV 文件,但我只能 return 扩展。如果我搜索姓名或手机号码,它会 return 一个空白的白页。这是我的代码:
$value = $_POST["search"];
$file = 'phonelist/PhonelistCSV2.csv';
while (($data = fgetcsv($file)) !== FALSE){
//print_r($data); - this was just a test to see the data printing out. It prints the entire CSV
print_r(array_keys($data,$value));
}
fclose($file);
经过一整天的谷歌搜索并试图让它工作后,我放弃了 fgetcsv。现在我正在尝试获取 CSV 并将其编码为 JSON with
$csv=file_get_contents($file); $array=array_map("str_getcsv", explode ("\n",$csv));
$json=json_encode($array);
我打印了 json 数组来验证内容是否与 csv 相同。我创建了一个 javascript 函数来搜索关键字。我正在测试将值放入 div 只是为了测试目的,但我无法使该功能正常工作
$value = $_POST["search"];
$keyword=json_encode($value);
<script type="text/javascript">
function search(keyword){
return json.filter(({name, ext, cell}) => {
return name.toLowerCase().indexOf(keyword.toLowerCase()) > -1 ||
ext.toLowerCase().indexOf(keyword.toLowerCase()) > -1 ||
cell.toLowerCase().indexOf(keyword.toLowerCase()) > -1
})
}
document.getElementById('test').innerHTML = json; // I tried it this way and
alert(search($keyword);
</script>
<div id="test"></div>
长话短说,我需要一些帮助来为我的内部网创建搜索以搜索包含名称、分机号和手机号码的 CSV 办公室目录。到目前为止,在我尝试过的解决方案中,我只能 return 分机号码。我希望它的功能类似于搜索“Tim”,return 所有名字中带有 Tim 的人及其后续扩展名、单元格 # 或两者。
您可以只对名称等内容进行不区分大小写的搜索,并相应地过滤您的记录。
第一部分只是将 csv 数据放入数组中。
<?php
$data =<<<DATA
Neil Buchanan,334,012345678
Tony Hart,314,01234828828
Henri Matisse,392,01234457575
DATA;
$data = array_map('str_getcsv', preg_split('/\R/',$data));
$name_search = function($keyword) use ($data) {
return array_filter($data, function($line) use ($keyword) {
return stristr($line[0], $keyword);
});
};
$results = $name_search('to');
var_export($results);
echo "Next Search\n";
$results = $name_search('he');
var_export($results);
输出:
array (
1 =>
array (
0 => 'Tony Hart',
1 => '314',
2 => '01234828828',
),
)Next Search
array (
2 =>
array (
0 => 'Henri Matisse',
1 => '392',
2 => '01234457575',
),
)