【问题标题】:Formating a txt file格式化文本文件
【发布时间】:2021-06-23 14:49:35
【问题描述】:

我的 TXT 文件格式如下:

123451234512345
123451234512345

我想用php把文件格式化成这种格式:。

12345-12345-12345
12345-12345-12345

这是我尝试过的:

$codes = "codes.txt";
$unformatedCode = file($codes, FILE_IGNORE_NEW_LINES);
$abcd = "-";
foreach ($array as $value) {
    $text = (string)$unformatedCode;
    $arr = str_split($text, "");
    $formatedCode = implode("-", $arr);
    echo $formatedCode;
}

【问题讨论】:

  • 这段代码会发生什么?应该怎么办?
  • str_split() 的第二个参数是一个整数,而不是字符串,它表示块的长度。所以使用5 而不是""。在以后的问题中,您应该包含一个示例,说明您的代码实际做了什么,这样我们就不必猜测了。
  • 对不起,我错过了,但它只是返回 NULL
  • 在 PHP error_reporting。在 >= 8 中,它会引发 TypeError。

标签: php file strsplit txt


【解决方案1】:

试试这个,

<?php
$arr = array_map(
  fn($v) => implode('-', str_split($v, 5)), 
  file("codes.txt", FILE_IGNORE_NEW_LINES)
);

print_r($arr);

结果:

Array
(
    [0] => 12345-12345-12345
    [1] => 12345-12345-12345
)

如果您想回显结果,请执行&lt;?= implode(PHP_EOL, $arr) ?&gt;

【讨论】:

  • 谢谢先生 (T_DOUBLE_ARROW),期待 ',' 或 ') 在我的错误日志中
  • 您需要最新的 php,否则将其更改为 function($v){return implode('-', str_split($v, 5))}
【解决方案2】:

可能 if 可以写得更短

$codes = "codes.txt";
$array = file($codes, FILE_IGNORE_NEW_LINES);
$p = "/([1-9]{5})([1-9]{5})([1-9]{5})/i";
$r = "${1}-${2}-${3}";

foreach ($array as $a) {
    echo preg_replace($p, $r, $a);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    相关资源
    最近更新 更多