在php中使用foreach修改以空格开头的数组

在php中使用foreach修改以空格开头的数组,php,Php,第一次在这里发布,刚刚进入开发阶段 尝试使用多行修改文本文件的输出,有些以字符开头,有些以空格/制表符开头。我想让以制表符/空格开头的行与它前面的任何行连接起来。我一直在研究如何使用正则表达式来实现这一点,但我不确定如何构建它。我想我需要使用'foreach'来查看每一行,找到每一行都有空格,然后使用一系列正则表达式将它们连接到前一行。这就是我自己已经走了多远,以及我认为foreach应该在哪里 <?php $file_handle = fopen("parse.txt", "r");

第一次在这里发布,刚刚进入开发阶段

尝试使用多行修改文本文件的输出,有些以字符开头,有些以空格/制表符开头。我想让以制表符/空格开头的行与它前面的任何行连接起来。我一直在研究如何使用正则表达式来实现这一点,但我不确定如何构建它。我想我需要使用'foreach'来查看每一行,找到每一行都有空格,然后使用一系列正则表达式将它们连接到前一行。这就是我自己已经走了多远,以及我认为foreach应该在哪里

<?php

$file_handle = fopen("parse.txt", "r");

while (!feof($file_handle)){

    $each_line = fgets($file_handle);
    foreach ($each_line    ){

        }

    print $each_line . "<br />";
}

fclose($file_handle);

?>

特定文本文件位于 如果您去那里查看/parse文件夹的索引,我也有这个php的当前版本

我的下一步是通过在第一行分解将每一行分成单独的数组:在每一行中,但我仍然想尝试自己解决这个问题,然后再向你们这些了不起的人寻求帮助(但如果你们有任何见解,我不会把目光移开)

提前感谢您的帮助

用于将文件读入单个字符串。然后,您可以使用正则表达式来匹配空白,或者新行,然后是空白,等等


我会发布正则表达式,但我不确定你到底想做什么。您不能在此处测试正则表达式:

您可能需要以下内容:

<?php

$file_handle = fopen("parse.txt", "r");

$key = null;
$arr = array();

while (!feof($file_handle)){

    $each_line = fgets($file_handle);

    if ($key && preg_match('/^\s+/', $each_line)) {
        $arr[$key] .= ' ' . trim($each_line);
    } else if (preg_match('/^([a-zA-Z]+):(.*)$/', $each_line, $m)) {
        $key = $m[1];
        $arr[$key] = trim($m[2]);
    }

}

fclose($file_handle);

?>

此代码执行以下任务:

<?php

$output = "";
foreach (file('parse.txt') as $line) {
  $output .= trim($line);

  // if the current line starts noes not starts with a tab, we append
  // a \n to it
  if (substr($line, 0, 1) != "\t") {
    $output .= "\n";
  }
}
echo $output;

以下是一个缺少
startsWithWhitespaceOrTab
函数的代码示例(该函数应该很容易编写,我将此作为示例)。其余的已经起作用了:

foreach (file('parse.txt', FILE_IGNORE_NEW_LINES) as $line) {
    if (!startsWithWhitespaceOrTab($line)) {
        echo "\n";
    }
    echo $line;
}

请参阅PHP函数和另一个解决方案。为您收集阵列中的行。不过我觉得我更喜欢“皮诺雄”

$file_handle = fopen("parse.txt", "r");
$fixed = array();
while (!feof($file_handle)){
    $line = fgets($file_handle);
    if (ctype_space($line[0])) { // Checks for whitespace
        $fixed[count($fixed)-1].= trim($line); // Adds to previous line
    } else {
        $fixed[] = trim($line); // Otherwise, keep line as is
    }
}
fclose($file_handle);

// Print
echo implode("\n",$fixed); 

首先,读一下。然后,继续阅读manual.file\u get\u的内容,听起来我可能想朝这个方向走。我明天还得把这件事搞得一团糟,把它当作一个方向。谢谢你提供的测试regex的链接,我将不得不添加书签,我从不知道这个工具的存在。我试着复制/粘贴它,但没有输出任何信息,我注意到没有。尝试使用您创建的几个不同变量在最后一个括号内打印,但没有得到我期望的结果。明天我会仔细看看。谢谢你!最后尝试
var\u dump($arr)
——它将行放入一个数组中。