2016-03-09 5 views
0

У меня есть строка $s="one\rtwo\rthree\rfour\rfive", и когда я делаю print $s Я ожидаю увидеть five только потому, что linefeed сбрасывает строку.PHP: символ r игнорируется

Вместо этого я, кажется, вижу one two three four five.

Что происходит?

+1

вы пытаетесь отобразить это в веб-браузере? –

+0

Да - я, по сути, запускаю скрипт оболочки через PHP, а сценарий оболочки выводит процентные доли прогресса («1% \ r2% \ r3% и т. Д.»). Функция 'print' запрашивается всякий раз, когда' fgets' обнаруживает новую строку, но также интерпретирует '\ r' как новую строку. В любом случае, чтобы переопределить это? – tetris11

+1

'print (end (explode (" \ r ", $ s)));' будет делать то, о чем вы просите. EDIT: Я только что видел ваш предыдущий комментарий об этом, находясь в оболочке. Это не то, что вы хотите. Он напечатает несколько строк. –

ответ

1

Если вы хотите переписать строку в окне консоли (как это кажется, что Вы пытаетесь сделать), вы можете сделать что-то вроде этого:

#!/c/PHP/php-7.0/php.exe <?php for($i = 0; $i < 100; $i++){ fwrite(STDOUT, "\r$i%"); }

или если вы хотите только последнюю часть строка разделенных возврат каретки вы можете сделать что-то вроде этого:

$endVal = end(explode("\r", $s)); print($endVal);