【问题标题】:Get a specific line from a variable [closed]从变量中获取特定行[关闭]
【发布时间】:2017-12-17 13:15:36
【问题描述】:

如何从包含 10 行或更多行的变量中仅获取特定行? 我试过这段代码:

$line = explode('/n', $lines);

但现在可以工作了。

这是我的完整代码:

<?php
$line = explode('\r\n', "i
c");
echo $line[1];
?>

【问题讨论】:

  • 换行符是\r\n\n,所以应该可以这样:$line = explode('\r\n', $lines); echo $line[1];
  • 您可以将您的数据添加到您的问题中吗?
  • 我认为你应该在双引号之间写“\r\n”,也许你只需要“\n”。
  • 如果 "\r\n" 和 "\n" 不起作用..那么显然没有换行符...
  • @LucFortunato - 编辑您的问题并添加您要解析的数据

标签: php arrays explode


【解决方案1】:

我不确定为什么 explode 对你不起作用(它应该)。我会建议 PHP_EOL 作为分隔符,看看它是如何吸引你的。为了比较,您可以使用preg_match(),但这会更慢。

代码:(Demo)

$string='line1
line2
line3 line 3
line4
line five
line 6
line 7
line eight
line 9
line 10
line eleven';

for($x=1; $x<10; $x+=2){  // $x is the targeted line number
    echo "$x preg_match: ";
    echo preg_match('/(?:^.*$\R?){'.($x-1).'}\K.*/m',$string,$out)?$out[0]:'fail';
    echo "\n  explode: ";
    echo explode(PHP_EOL,$string)[$x-1];
    echo "\n---\n";
}

输出

1 preg_match: line1
  explode: line1
---
3 preg_match: line3 line 3
  explode: line3 line 3
---
5 preg_match: line five
  explode: line five
---
7 preg_match: line 7
  explode: line 7
---
9 preg_match: line 9
  explode: line 9
---

我想得越多,您的报价可能就有问题。单引号将\n 呈现为两个非空白字符\n。您必须使用双引号将其视为换行符。

Another demo:

echo 'PHP_EOL  ',explode(PHP_EOL,$string)[0];     // PHP_EOL works
echo "\n\n",'"\\n"  ',explode("\n",$string)[0];  // "\n" works
echo "\n\n","'\\n'  ",explode('\n',$string)[0];  // '\n' doesn't work, the newline character is "literally" interpreted as "backslash n"

输出:

PHP_EOL  line1     // This is correct

"\n"  line1        // This is correct

'\n'  line1        // The whole string is printed because there is no "backslash n" to explode on.
line2
line3 line 3
line4
line five
line 6
line 7
line eight
line 9
line 10
line eleven

【讨论】:

    【解决方案2】:

    如果您尝试按行拆分,那么您应该使用:

    $line = explode("\n", $lines);
    

    举个例子:

    <?php
    
    $lines = "first line
    second line
    third line
    fourth line";
    
    $line = explode("\n", $lines);
    
    echo $line[3];
    

    这会给你fourth line。请记住,数组中的第一个元素是 0,第二个是 1,第三个是 2,依此类推...

    【讨论】:

    • 是的...我试过了,但我得到了 $line[0] 中的所有字符串
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多