2013-06-13 2 views
0

У меня есть следующий код.Получение проблем при расщеплении строки в PHP

$var1 = 'This is line1 

     This is line2 

     This is line3'; 

$var_arr = explode("\n", $var1); // or preg_split("/\n/", $var1); same 
echo '<ul type = "disc" class="deal_data" >'; 
foreach($var_arr as $var1) 
{        
    echo '<li><p>'.$var1.'</p></li>';         
} 
echo '</ul>'; 
echo 'String Length:'.strlen($var_arr[1]); 

Его выход:

Output

Как второй и четвертый элементы списка получить длину, отличную от нуля?

+0

\ n означает «новая строка» - сколько строк вы считаете? – jmadsen

ответ

1

я могу видеть, что есть две новые строки в $var1,

попробовать это

explode("\n\n", $var1); 

phpFiddle Demo

+1

это не работает. результаты только один массив элементов – zkanoca

+0

Я проверил код на http://phpfiddle.com и нашел правильный. пойдите туда и попробуйте приведенный выше код – Rab

+0

http://phpfiddle.org/main/code/dni-w50 – Rab

1

Добавить взрываются разделители, \r:

<?php 
    $var1 = 'This is line1 

      This is line2 

      This is line3'; 

    $var_arr = explode("\n\r", $var1); // or preg_split("/\n/", $var1); same 
    echo '<ul type = "disc" class="deal_data" >'; 
    foreach($var_arr as $var1) 
    { 
     echo '<li><p>'.$var1.'</p></li>'; 
    } 
    echo '</ul>'; 
    echo 'String Length:'.strlen($var_arr[1]); 
?> 

Результат:

<ul type = "disc" class="deal_data" > 
    <li> 
     <p>This is line1</p> 
    </li> 
    <li> 
     <p>This is line2</p> 
    </li> 
    <li> 
     <p>This is line3</p> 
    </li> 
</ul> 
String Length:24 
1

Это потому, что ваш вход имеет пять линий, две из которых являются пустыми:

$var1 = 'This is line1 /* Line 1 */ 
         /* Line 2 */ 
     This is line2 /* Line 3 */ 
         /* Line 4 */ 
     This is line3 /* Line 5 */'; 
+0

Это не настоящий ответ. – zkanoca

+2

@ ÖzkanÖZLÜ вопрос был «Как [2] и 4-й пункты списка имеют длину?». Я уверен, что это реальный ответ на этот вопрос ... –

+0

Очевидно, что парень спрашивает, как удалить пустые элементы списка. Даже вопрос в том, как он проявляется? – zkanoca

0

Ваши текстовые строки, разделенные двумя символами новой строки. Вы взрыва на одной новой строки, так что вы получите записи массива для пустых строк, а также те, с текстом.

Попробуйте

$var_arr = explode("\n\n", $var1); 
+0

приводит только к одному элементу массива. – zkanoca

+0

Может быть. Если EOL фактически «\ n \ r», как это могло бы произойти в Windows, это было бы так. На самом деле это невозможно сказать из оригинальной публикации. –

0

Такое условие в течение команда может помочь вам ...

$var1 = 'This is line1 

     This is line2 

     This is line3'; 

$var_arr = explode("\n", $var1); // or preg_split("/\n/", $var1); same 
echo '<ul type = "disc" class="deal_data" >'; 
foreach($var_arr as $var1) 
{        
    if($var1!="") 
     echo '<li><p>'.$var1.'</p></li>';         
} 
echo '</ul>'; 
echo 'String Length:'.strlen($var_arr[1]); 
0

фильтра и обрезать массив:

$var1 = 'This is line1 

     This is line2 

     This is line3'; 

$var_arr = explode("\n", $var1); 
$var_arr = array_filter(array_map("trim",$var_arr)); 

var_dump(array_values($var_arr)); 

Выход

array (size=3) 
    0 => string 'This is line1' (length=13) 
    1 => string 'This is line2' (length=13) 
    2 => string 'This is line3' (length=13)