2012-01-05 6 views
1

Привет, У меня есть простой скрипт split, и я разделяю строку на новой строке, в которой есть много новых символов строк. Вот код:Функция split не работает над новыми строками

<?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); 
    } 
?> 

Он отлично работает, когда я использую СЛУЧАЙ 3 в коде, но он не работает, когда я использую либо case1 или СЛУЧАЙ 2 (только СЛУЧАЙ 3 работает нормально). Может ли кто-нибудь пролить свет на это?

Это, как я запустить его в командной строке (Linux машины):

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

В этом случае, когда я печатаю $ ARGV [1], он печатает всю строку, но она относится к нему так же, как Вариант 2 (с одинарными кавычками).

UPDATE:

Многие из вас сказали, что причиной проблемы является и не является ответом на него. Однако знание причины помогло мне исправить это. Так что ответ:

ОТВЕТ:

Вместо того, чтобы использовать \ N в двойных кавычках ("\ п"), одинарные кавычки ('\ п'):

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

OR 

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

Однако раскол отсчеты '\' также как персонаж, и я не знаю почему. Но взорваться правильно. Поскольку раскол устарел, я не делал много исследований по этому вопросу.

Благодарим за всех, кто сообщил мне, что раскол устарел.

+0

Не используйте 'split'. Он устарел в пользу 'preg_split' для регулярных выражений и' взрывается' для строк. –

+0

, похоже, отлично работает для меня ... хотя вместо split() я использовал бы explode(). – Nick

+0

@ Ник вы даже прочитали вопрос ..? –

ответ

4

CASE1 и CASE2 не будут работать по простой причине, так как \n оценивается как литерал \n, а не символ новой строки.

Только CASE3 с двойными кавычками оценит \n как новую строку.

Кроме того, функция split() устарела. Вместо этого попробуйте использовать explode().

+1

[preg_split] (http://php.net/manual/en/function.preg-split.php) также заслуживает упоминания, я думаю :) –

+2

Это тоже не подходит, он хочет разбить по строке, а не шаблон, поэтому нет необходимости использовать его :) –

1

Это потому, что '\ n' не выводит новую строку, а не прерывает новую строку, поэтому в CMD тоже вы не пропускаете новые строки;

Кроме того, split() устарел, используйте explode();

1

Большая разница между использованием одинарных кавычек и двойными кавычками - это автоматическая замена внутри строк.

Использование «» позволит заменить переменные и использовать escape-последовательности, пока «не поддерживает».

$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) 

Относительно вашего вопроса о линии кормов, обратите внимание, что \ п \ г, \ r \ n используются в разных комбинациях в зависимости от ОС, а информация, поступающая из ОС Windows, обычно имеет \ r \ n, тогда как linux имеет \ n. MacOS используется или по-прежнему имеет значение только \ r, я думаю, не уверен.

Смежные вопросы