【问题标题】:PHP - Regular Expression - Arrays - Find the last number and add them togetherPHP - 正则表达式 - 数组 - 找到最后一个数字并将它们加在一起
【发布时间】:2025-12-06 04:05:02
【问题描述】:

给了我一个包含类似这种结构的文件:

12345    ABC  100M 001   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  150

12345    ABC  100M 011   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  80

12345    ABC  100 011   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  80

我需要从这个文件中获取以下部分:

  • 如果它们相似,则将第三列(即 100M)组合在一起
  • 将第四列加在一起(如果它们与第三列在同一组中)
  • 根据第四列将最后一列相加

我已经设法做到了以下几点:

$List1 = array();
$grab = fopen("file.txt", "r") or die("Can't open file");
$check = fgets($grab);

 while(!feof($grab)) {    
   if (ereg("^[[:digit:]]{5} +ABC +([[:digit:]]{3}[[:alpha:]]?)+ ([[:digit:]]{3})",
     $check, $output)) {
  if (!in_array($output[1], $List1)) {      
    array_push($List1, $output[1]);               
  } 
      if (!in_array($output[2], $List1)) {        
    array_push($List1, $output[2]);                    
  } 
}    
$check = fgets($grab);
 }     
 fclose($grab); 

foreach ($List1 as $list) {
   print "$list <br/>";     
 }

我设法以某种方式将第三列组合在一起。
正在显示第四列,但如果它在同一组下,我不确定如何将它组合到第三列中。
而且我不确定如何轻松获取文件/数组中的最后一位。 是否有获取文件中的最后一个并将它们相加的快捷方式?

提前感谢任何可以帮助我的人。

【问题讨论】:

  • 我认为没有简单的方法可以做到这一点。我建议您将数据转储到 mysql 并在那里查询。
  • 这实际上是一个使用 SQL 似乎很容易解决的问题。你能有一个 SQL 可查询的格式吗?呵呵。

标签: php regex arrays file


【解决方案1】:

应该这样做:

$string = '12345    ABC  100M 001   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  150

12345    ABC  100M 011   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  80

12345    ABC  100 011   2.0  ABC    1010  4510  A01 451  Apple, Johnny A  80';

$third = array();
$fourth = array();

foreach (explode("\n", $string) as $line)
{
    // Skip empty lines.
    if (empty($line))
        continue;

    // Clean up any excessive white space.
    $line = trim(preg_replace('~[\s]{2,}~', ' ', $line));

    $info = explode(' ', $line);

    if (!isset($third[$info[2]]))
        $third[$info[2]] = array();

    $third[$info[2]][] = $info;

    if (!isset($fourth[$info[3]]))
        $fourth[$info[3]] = 0;

    $fourth[$info[3]] += (int) end($info);
}

print_r(array(
    'third' => $third,
    'fourth' => $fourth,
));

【讨论】:

  • 我尝试了上述方法,但它只返回了我的空白数组。当我尝试将它与 ' $handle = fopen("cis_enroll.txt", "r") 或 die("Can't open file");' 一起使用时
最近更新 更多