【问题标题】:PHP - Convert a messy string to a useable onePHP - 将凌乱的字符串转换为可用的字符串
【发布时间】:2013-06-09 16:54:22
【问题描述】:

我有一堆来自一支足球队的数据需要整理。目前,它看起来像这样(出于演示目的,我只包括了 3 个):

1   
Team One
9   7   1   1   31  13  18  22
2   
Team Two
9   6   2   1   25  21  4   19
3   
Team Three
9   4   3   2   26  18  8   14

为清楚起见,我将解构前 3 行:

1\t\n
Team One\n
9\t7\t1\t1\t31\t13\t18\t22

请注意在每个团队的位置之后有一个制表符,然后是一个换行符。然后,下一行的团队名称,只有一个换行符。最后,关于该团队的所有详细信息。然后下一支球队的统计数据开始。

我需要将其转换为:

1,Team One,9,7,1,1,31,13,18,22
2,Team Two,9,6,2,1,25,21,4,19
3,Team Three,9,4,3,2,26,18,8,14

每一行都以球队的位置开始,然后是球队名称,然后是每个统计数据——全部用逗号分隔。

我尝试过这样做,但运气不佳。我想某种花哨的正则表达式可以解决问题,但我不知道如何......希望有人能提供帮助!

【问题讨论】:

  • 您听说过 awk 及其实现 gawk 吗?
  • @PatrykZiemkowski 没听说过,去看看!
  • 它专为像您这样的问题而设计。

标签: php regex string converter


【解决方案1】:

你可以使用

$in = file("log.txt");
$out = fopen("php://output", "w");

foreach(array_chunk($in, 3) as $group) {
    $group = array_map("trim", $group);
    $group[2] = implode(",", str_getcsv($group[2], "\t"));
    fputcsv($out, $group);
}

输出

1,"Team One","9,7,1,1,31,13,18,22"
2,"Team Two","9,6,2,1,25,21,4,19"
3,"Team Three","9,4,3,2,26,18,8,14"

如果您想要空外壳,请使用

fputcsv($out, $group, ",", " ");

输出

1, Team  One , 9,7,1,1,31,13,18,22 
2, Team  Two , 9,6,2,1,25,21,4,19 
3, Team  Three , 9,4,3,2,26,18,8,14 

【讨论】:

  • 谢谢!这给了我最好的结果!
【解决方案2】:
<?php
    $resultstr = array();
        foreach($Teams as $items){
        $resultstr[] = $items['Team One'];
    }
    $items = implode(", ",$resultstr);
    echo $items;
?>

类似的东西。您可以使用自己的数据对其进行编辑,因为您没有在问题中提及这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2019-10-10
    • 2019-01-05
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多