Php 从CSV输出特定行
我有一个小函数,它读取CSV文件并输出标题后的所有行 现在我想扩展这个函数来接受一个Php 从CSV输出特定行,php,Php,我有一个小函数,它读取CSV文件并输出标题后的所有行 现在我想扩展这个函数来接受一个位置,这样只输出包含这个位置的行。我不确定我该怎么做 以下是CSV文件: ID、位置、输出、wdatatype、wdb、wbyte、wbit、bitval、rdatatype、rdb、rbyte、rbit Lampe1Taster,Wohnzimmer,#输出,DB,1,0,0,1,A,0,0,7 Lampe2Ein,Wohnzimmer,#输出2,DB,1,0,1,1,A,0,0,6 Lampe2Aus,Küc
位置
,这样只输出包含这个位置
的行。我不确定我该怎么做
以下是CSV文件:
ID、位置、输出、wdatatype、wdb、wbyte、wbit、bitval、rdatatype、rdb、rbyte、rbit
Lampe1Taster,Wohnzimmer,#输出,DB,1,0,0,1,A,0,0,7
Lampe2Ein,Wohnzimmer,#输出2,DB,1,0,1,1,A,0,0,6
Lampe2Aus,Küche,#输出2,DB,1,0,1,0,A,0,0,6
位置将是第二列。在这种情况下,Wohnzimmer
和Küche
以下是函数:
$id=$\u GET['location'];
$rows=文件('data.csv');
foreach($行作为$行){
echo$行;
列表($id_num)=分解(“,”,$row);
如果($id_num==$id){
echo$行;
打破
}
}
这将获取第一列匹配的行。但我希望它获取第二列匹配的行
我将提供位置
,如下所示:
plc.php?function=LoadRoom&location=Wohnzimmer
所以,如果“位置”是Wohnzimmer,我需要输出看起来完全一样
Lampe1Taster,Wohnzimmer,#output,DB,1,0,0,1,A,0,0,7
Lampe2Ein,Wohnzimmer,#output2,DB,1,0,1,1,A,0,0,6
感谢您的帮助>P>,您应该考虑使用内置PHP(OR)函数来解析CSV字段,而不是使代码复杂化?
(方便地将CSV文件解析为数组):
:
资料来源:
然后您可以像通常对数组元素那样访问正确的元素($arr[0]
)
因此,基于以上内容,要解决您的特定问题,请查看以下示例代码:
$csv = 'ID,Breich,output,wdatatyp,wdb,wbyte,wbit,bitval,rdatatyp,rdb,rbyte,rbit
Lampe1Taster,Wohnzimmer,#output,DB,1,0,0,1,A,0,0,7
Lampe2Ein,Wohnzimmer,#output2,DB,1,0,1,1,A,0,0,6
Lampe2Aus,Küche,#output2,DB,1,0,1,0,A,0,0,6'; // CSV data
$input = @$_GET['id'] ?: 'Breich'; // input column name
$value = @$_GET['value'] ?: 'Wohnzimmer'; // input value to search
$csv = array_map("str_getcsv", explode(PHP_EOL, $csv));
$keys = array_shift($csv);
$key = array_search($input, $keys);
while ($line = array_shift($csv)) {
if ($line[$key] == $value) {
print implode(',', $line) . PHP_EOL;
}
}
// Outputs:
// Lampe1Taster,Wohnzimmer,#output,DB,1,0,0,1,A,0,0,7
// Lampe2Ein,Wohnzimmer,#output2,DB,1,0,1,1,A,0,0,6
在my data.csv中填入以下内容:
ID,location,output,wdatatyp,wdb,wbyte,wbit,bitval,rdatatyp,rdb,rbyte,rbit
Lampe1Taster,Wohnzimmer,#output,DB,1,0,0,1,A,0,0,7
Lampe2Ein,Wohnzimmer,#output2,DB,1,0,1,1,A,0,0,6
Lampe2Aus,Küche,#output2,DB,1,0,1,0,A,0,0,6
这个很好用
$csv = file_get_contents('data.csv');
$input = 'location'; // Welche Spalte soll gelesen werden
$value = $_GET['location']; // Wert dieser Spalte
$csv = array_map("str_getcsv", explode(PHP_EOL, $csv));
$keys = array_shift($csv);
$key = array_search($input, $keys);
while ($line = array_shift($csv)) {
if ($line[$key] == $value) {
echo implode(',', $line) . PHP_EOL;
}
}
测试$\u获取['id']!=$第[2]行
您的示例id
值与Breich
列匹配,而不是id
列稍微更改了我的第一篇文章,并使用了我已有的不同功能。也许这一个会更容易适应。好的,这很有效!但是我如何将解析的CSV数据分配给$CSV?@Bavilo如果您将文件作为输入(而不是文本),请使用第一个示例中的代码。如果您已经解析了CSV,这取决于您使用的是哪种格式,您已经尝试了试用和出错。我已经尝试了第一个示例,但是$CSV=array\u map('str\u getcsv',file('data.CSV');不起作用$csv不包含Array@Bavilo可能您使用了错误的路径,请首先尝试绝对路径(因为您的PHP实例可能使用不同的路径。如果不起作用,请检查:,谷歌,尝试或询问其他有关您遇到的特定问题的问题,因为注释不是用于解决单个问题的。
$csv = 'ID,Breich,output,wdatatyp,wdb,wbyte,wbit,bitval,rdatatyp,rdb,rbyte,rbit
Lampe1Taster,Wohnzimmer,#output,DB,1,0,0,1,A,0,0,7
Lampe2Ein,Wohnzimmer,#output2,DB,1,0,1,1,A,0,0,6
Lampe2Aus,Küche,#output2,DB,1,0,1,0,A,0,0,6'; // CSV data
$input = @$_GET['id'] ?: 'Breich'; // input column name
$value = @$_GET['value'] ?: 'Wohnzimmer'; // input value to search
$csv = array_map("str_getcsv", explode(PHP_EOL, $csv));
$keys = array_shift($csv);
$key = array_search($input, $keys);
while ($line = array_shift($csv)) {
if ($line[$key] == $value) {
print implode(',', $line) . PHP_EOL;
}
}
// Outputs:
// Lampe1Taster,Wohnzimmer,#output,DB,1,0,0,1,A,0,0,7
// Lampe2Ein,Wohnzimmer,#output2,DB,1,0,1,1,A,0,0,6
ID,location,output,wdatatyp,wdb,wbyte,wbit,bitval,rdatatyp,rdb,rbyte,rbit
Lampe1Taster,Wohnzimmer,#output,DB,1,0,0,1,A,0,0,7
Lampe2Ein,Wohnzimmer,#output2,DB,1,0,1,1,A,0,0,6
Lampe2Aus,Küche,#output2,DB,1,0,1,0,A,0,0,6
$csv = file_get_contents('data.csv');
$input = 'location'; // Welche Spalte soll gelesen werden
$value = $_GET['location']; // Wert dieser Spalte
$csv = array_map("str_getcsv", explode(PHP_EOL, $csv));
$keys = array_shift($csv);
$key = array_search($input, $keys);
while ($line = array_shift($csv)) {
if ($line[$key] == $value) {
echo implode(',', $line) . PHP_EOL;
}
}