使用php将csv文件中的数据从一行匹配到另一行?
我是php的新手。这能做到吗??脚本角色是在另一行中查找匹配项,但不在同一列中 .csv文件使用php将csv文件中的数据从一行匹配到另一行?,php,regex,csv,Php,Regex,Csv,我是php的新手。这能做到吗??脚本角色是在另一行中查找匹配项,但不在同一列中 .csv文件 **first row** **second row** **third row** This is for NNMM NN/MM@000-45NNMM;1 2001 AA/BB@000-45AABB;2 ----- 2002 NN/MM@000-45NNMM;2 ---
**first row** **second row** **third row**
This is for NNMM NN/MM@000-45NNMM;1 2001
AA/BB@000-45AABB;2 ----- 2002
NN/MM@000-45NNMM;2 ----- 2003
This is for XXYY XX/YY@000-45XXYY;1 2004
LL/QQ@000-45LLQQ;2 ----- 2005
WW/KK@000-45WWKK;2 ----- 2006
CC/DD@000-45CCDD;2 ----- 2005
PP/SS@000-45PPSS;2 ----- 2006
This is for AABB AA/BB@000-45AABB;1 2007
XX/YY@000-45XXYY;2 ----- 2008
This is for PPSS PP/SS@000-45PPSS;1 2009
This is for CCDD CC/DD@000-45CCDD;1 2010
第一行:有5个字段,字符串中的最后一个字符是“2”(即AA)/BB@000-45AABB;2)
第二行:有5个字段,字符串中的最后一个字符是“1”(即AA)/BB@000-45AABB;1)
现在我想做一个匹配脚本,第一行在2ndrow中找到匹配项。。并显示找到匹配项的第一行中的数据。。。希望它有意义
期望输出
This is for NNMM NN/MM@000-45NNMM;1 2001
This is for XXYY XX/YY@000-45XXYY;1 2004
This is for AABB AA/BB@000-45AABB;1 2007
This is for PPSS PP/SS@000-45PPSS;1 2009
This is for CCDD CC/DD@000-45CCDD;1 2010
我已经开始了一个脚本,但坚持与逻辑工作
$file = fopen('sample.csv', 'r');
echo "<table style='border: 2px solid black; text-align:left'>";
while (($line = fgetcsv($file)) !== FALSE) {
list( $row1, $row2, $row3) = $line;
echo "<tr>";
echo "<td>$row1</td>";
echo"<td>$row2</td>";
echo "<td>$row3</td>";
echo "</tr>";
}
echo "</table>";
$file=fopen('sample.csv','r');
回声“;
而(($line=fgetcsv($file))!==FALSE){
列表($row1、$row2、$row3)=$line;
回声“;
回显“$row1”;
回显“$row2”;
回显“$row3”;
回声“;
}
回声“;
这可能不是最好的工具,但我试着用regex来做,我知道这很难看,但试一下:
(?|(?:([A-Z]{2}\/[A-Z]{2}@\d{3}-\d{2}([A-Z]{4});)(1))(?=(?:.|\n)+?(\d{4})(?:.|\n)+\1(?:2))|(?:([A-Z]{2}\/[A-Z]{2}@\d{3}-\d{2}([A-Z]{4});)2)(?=(?:.|\n)+(?:\1(1))(?:.|n)+?(\d{4})))
相关数据是分组的,因此您可以使用类似于“这是$2\t$1\t$3\t$4”的内容来获取所需的数据。在我的演示的替换部分,您可以看到输出(但它只替换匹配的部分,其余的umatched文本仍然存在,但这只是为了查看这样的输出的外观)。使用do while()而不是while sorry不能为您编写代码
您还必须使用if语句if($row1==$row1){然后执行此操作}可怕的!:)为什么不使用数据库?对不起,先生,但是csv…我怎样才能只显示匹配文件?我在脚本中插入了它,但它不起作用……我不擅长php,但您可以使用preg_match_all,您将在数组中获得所有结果,然后从them@Bee超过十个什么?php中没有针对每个循环的csv文件?csv文件包含数千列。。。该示例仅显示5个匹配项。。。。如果他们的匹配是10或100,该怎么办?@Bee但它似乎可以处理更多的行,例如。但这是你的决定