Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从CSV输出特定行_Php - Fatal编程技术网

Php 从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文件并输出标题后的所有行

现在我想扩展这个函数来接受一个
位置
,这样只输出包含这个
位置
的行。我不确定我该怎么做

以下是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;
    }
}