php
2012-01-05 64 views 1 likes 
1

嗨我有简单的拆分脚本,我在新行上拆分了一个字符串,其中有许多新行字符。下面是代码:拆分功能不能在新行上工作

<?php 
    $string = $argv[1]; // CASE 1: COMMAND LINE ARGUMENT. 
    echo "String is : $string\n"; 
    //$string = 'Hello Shakir\nOkay Shakir\nHow are you ?'; //CASE2: SINGLE QUOTE. 
    $string = "Hello Shakir\nOkay Shakir\nHow are you ?"; //CASE 3: DOUBLE QUOTE. 
    $lines = array(); 
    $lines = split("\n", $string); 

    foreach ($lines as $line) { 
     echo "line is : $line\n"; 
     //var_dump($line); 
    } 
?> 

它,当我在代码中使用CASE 3工作正常,但是当我使用两种或CASE1 CASE 2(仅CASE 3个正常工作)它不工作。任何人都可以谈谈这件事吗?

这是我的命令行上运行(Linux机器):

php my_script.php "Hello Shakir\nOkay Shakir\nHow are you ?" 

在这种情况下当我打印$的argv [1],将打印整个字符串,但它同样将其视为CASE2(用单引号)。

UPDATE:

你们中许多人说,这个问题的原因是什么,而不是它的答案。但是,知道原因帮助我解决了这个问题。所以答案是:

答:

在双引号使用\ N( “\ n”)相反的,使用单引号( '\ n'):

$lines = split('\n', $string); 

OR 

$lines = explode('\n', $string); 

然而分裂计数'\'也是一个角色,我不知道为什么。但爆炸是正确的。由于拆分被弃用,我没有对此做过多的研究。

谢谢所有让我知道split已被弃用的人。

+0

不要使用'split'。对于正则表达式,它不推荐使用'preg_split',而对于字符串使用'explode'。 – 2012-01-05 15:24:04

+0

似乎为我工作...虽然,我会使用explode()而不是拆分()。 – Nick 2012-01-05 15:25:48

+0

@尼克你甚至读过这个问题..? – 2012-01-05 15:29:39

回答

4

CASE1和CASE2不会工作,原因很简单,因为\n被评估为文字\n而不是换行符。

只有带双引号的CASE3才会将\n评估为换行符。

此外,不推荐使用功能split()。请尝试使用explode()

+1

[preg_split](http://php.net/manual/en/function.preg-split.php)也值得一提,我想:) – 2012-01-05 15:27:19

+2

这里也不合适,他想用字符串分割,而不是通过模式,所以没有必要使用它:) – 2012-01-05 15:29:06

1

这是因为'\ n'不会输出新行,并且不会像新行那样插入,因此在CMD中也不会传递新行;

此外,split()已弃用,请使用explode();

0

Single-quoted strings不应该展开像/ n这样的所有转义字符串。

1

使用单引号''和双引号“”之间的最大区别是用于字符串内部的自动替换。

使用“”将可以替换变量和使用转义序列,而''不支持这一点。

$name = 'Mathieu'; 
$case1 = "Hi this is $name speaking\nPleased to meet you!"; 
echo $case1; 

//Will result in 
Hi this is Mathieu speaking 
Pleased to meet you! 

当使用单引号将产生:

$name = 'Mathieu'; 
$case1 = 'Hi this is $name speaking\nPleased to meet you!'; 
echo $case1; 

//Will result in 
Hi this is $name speaking\nPleased to meet you! 

所有转义序列可能是:

\n Line feed (dec 13) 
\r Carriage return (dec 10) 
\t Tab (dec 8) 

相对于您行约问题饲料,注意\ n,\ r, \ r \ n根据操作系统和来自Windows操作系统的信息以不同的组合使用通常功能\ r \ n,而Linux仅具有\ n。 MacOS过去或仍然只有功能\ r我认为,不确定。

相关问题