Почему взрывается, preg_split и str_split возвращает дополнительный элемент массива - PullRequest
0 голосов
/ 20 сентября 2019

Я играю arround с этой функцией, в основном я хочу "отделить" строку, используя символ \ n, но по какой-то причине в этом случае он генерирует 3 элемента:

$breaks = explode("\n","\n\n");

Моя цель для этогоcase - это просто массив из 2 элементов.

Ответы [ 4 ]

2 голосов
/ 20 сентября 2019

Последнее вхождение разделителя в вашей строке отделяет пустую строку, например,

var_dump( explode("\n", "\n") );

вернет массив с двумя пустыми элементами, первый слот будет получен до вхождения разделителя, второе значение изза ним:

array(2) {
  [0] =>
  string(0) ""
  [1] =>
  string(0) ""
}

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

1 голос
/ 20 сентября 2019

Похоже, вы хотите сопоставить строки нулевой или большей длины, которые содержат символы, не являющиеся вертикальными пробелами, за которыми следует символ вертикальных пробелов.

Код: ( Demo )

$text = "\n\n";
var_export(preg_match_all('~\V*(?=\R)~', $text, $matches) ? $matches[0] : []);

Будет несколько шаблонов и функций для достижения желаемого результата, но этот мне кажется довольно простым.

Что касается объяснения вашего текущего результата, представьте себе, что нужно разделить внешние проекции.на одной из ваших рук, основанных на промежутках между ними.Существует четыре пробела, поэтому количество ваших пальцев будет равно 5 (за исключением врожденных дефектов или несчастных случаев).

1 голос
/ 20 сентября 2019

Вы можете сделать это путем итерации строки, отметив Демо

$string = "\n\n";
$result = [];
$str = "";
$index = 0;
while($index < strlen($string)){
    if($string[$index] == "\n"){
        $result[] = $str;
        $str = "";
    }else{
        $str .= $string[$index];
    }
    $index++;
}
if($str){
    $result[] = $str;
}
var_dump($result);
0 голосов
/ 20 сентября 2019

Является ли реальной проблемой выделение строк текста, разделенных \ n, \ r, \ r \ n или \ n \ n?

Если доступны разные источники данных (Win, Linux), разные разделителидолжны быть рассмотрены.Для этого идеально подходит preg_split.Пример:

<code>$text = " Line1 \n Line2 \r\n Line3 \r Line4 \n\n Line5 \n";

$arr = preg_split('~\R~', $text, null, PREG_SPLIT_NO_EMPTY);

echo "<pre>".var_export($arr,true)."
";

Вывод

array (
  0 => ' Line1 ',
  1 => ' Line2 ',
  2 => ' Line3 ',
  3 => ' Line4 ',
  4 => ' Line5 ',
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...