preg_split (перевод каретки, пустые переменные в массиве)

running-frag

Новичок
preg_split (перевод каретки, пустые переменные в массиве)

$km = "
one half-one
two

three
four";

$pieces = preg_split('/\n/', $km, -1, PREG_SPLIT_NO_EMPTY);
print_r ($pieces);

Получаем
Array
(
[0] => one half-one
[1] => two
[2] =>
[3] => three
[4] => four

)

И собственно вопрос. Откуда у нас берётся "пустая" перменная и как избавить массив от неё?

PS: Нашёл аналог http://www.php.net/manual/en/function.preg-split.php#83463 но там описания нету.
 

running-frag

Новичок
Array
(
[0] =>
[1] => one half-one
[2] => two
[3] =>
[4] => three
[5] => four
)
array(6) {
[0]=>
string(1) "
"
[1]=>
string(13) "one half-one
"
[2]=>
string(5) "two
"
[3]=>
string(1) "
"
[4]=>
string(6) "three
"
[5]=>
string(4) "four"
}

-~{}~ 13.01.09 17:20:

Ну откуда она берётся уже стало ястно. ^_^ А вот как бы её убрать. Или чем.. Подскажите пожалуста.

-~{}~ 13.01.09 17:46:

$km = "
one half-one
two

three
four";

$pieces1 = preg_split('/\n/', $km, -1, PREG_SPLIT_NO_EMPTY);

for ($i=0; $i <= count($pieces1); $i++)
{
$k = ltrim(preg_replace("/\n/", "/ /", $pieces1[$i]));
if ($k != NULL) {print $k; print "\n";}

}

-~{}~ 13.01.09 17:47:

На "коленке". Кто может указать где "неправильности в написании"? ПЛЗ. ;)

-~{}~ 13.01.09 18:00:

И конечный результат...

$kill_mail = "
2007.10.12 13:32:00

Alliance: NONE
Corp: The Kaboomers
Destroyed: Tracking Array
Moon: Unknown
System: EC-P8R
Security: 0.0
Damage Taken: 25331

Involved parties:";

$pieces = preg_split('/\n/', $kill_mail, -1, PREG_SPLIT_NO_EMPTY);

for ($i=0; $i <= count($pieces); $i++)
{
$k = ltrim(preg_replace("/\n/", "/ /", $pieces[$i]));
if ($k != NULL) {$search[$i] = $k;}
}
print_r ($search);


PS: x-yuri огромное спс. ^_^ Как показало всё можно самому.. Главное иметь правильное направление.... Ещё раз спс.
 

x-yuri

Новичок
так вот: под windows разделитель строк - \r\n, под unix - \n, а под macos - \n\r :confused:

for ($i=0; $i <= count($pieces); $i++)
{
$k = ltrim(preg_replace("/\n/", "/ /", $pieces[$i]));
if ($k != NULL) {$search[$i] = $k;}
}
а это ты загнул. preg_replace ничего не делает. Вместо ltrim могло быть trim (l никакой смысловой нагрузки не несет). И имхо логичнее $k сравнивать с '' или просто if ($k). Но в любом случае этот кусок не нужен
 

nalim

Новичок
а нужно резать только по переносам?
можно порезать по пробельным символам

'/[\s]+/'

что удалит любые переводы строк

сорри не \w а \s конечно
 

Ackrite

Новичок
'/[\w]+/'

удалит все, кроме переводов строк :))
наверное, ты имел ввиду \W. имхо, глупо разделять по словам...

-~{}~ 13.01.09 18:26:

про \s тоже самое - глупо, имхо.
 

nalim

Новичок
еще раз сорри)
'/\s+/'

-~{}~ 13.01.09 18:29:

упс)
'one half-one'
если есть пробелы то не годится
 

running-frag

Новичок
Ackrite "как так и должно было быть". СПС :)

x-yuri а если вот так. Это "более или менее" на что то разумное похоже?

$kill_mail = $HTTP_POST_VARS["kill_mail"];
$pieces = preg_split('/\n/', $kill_mail, -1, PREG_SPLIT_NO_EMPTY);

for ($i=0; $i <= count($pieces); $i++)
{
$k = trim($pieces[$i], "\r\n");
if ($k) {$search[$i] = $k;}
}

print_r ($search);

Бок правда с нумерацией в $search, но вариант имеет право на жизнь? Вариант Ackrite подошёл. Ну надо ж разобраться. Интересно то..... :)

PS: "Разбивка строк" это след. этап.... Будем курить манки.. :) Позже положу что получилось. Или не получилось.. X_X
 

x-yuri

Новичок
x-yuri а если вот так. Это "более или менее" на что то разумное похоже?

$kill_mail = $HTTP_POST_VARS["kill_mail"];
$pieces = preg_split('/\n/', $kill_mail, -1, PREG_SPLIT_NO_EMPTY);

for ($i=0; $i <= count($pieces); $i++)
{
$k = trim($pieces[$i], "\r\n");
if ($k) {$search[$i] = $k;}
}

print_r ($search);
лучше, чтобы не было проблем с нумерацией
PHP:
$search = array();
for ($i=0; $i <= count($pieces); $i++)
{
    $k = trim($pieces[$i], "\r\n");
    if ($k)
        $search[] = $k;
}
но повторяю, этот кусок кода не нужен. Используй вариант предложенный Ackrite

-~{}~ 15.01.09 03:45:

running-frag, да, сорри, там лучше
PHP:
    if (strlen($k)) 
        $search[] = $k;
потому что если $k === '0', то в $search такая строка не попадет
 
Сверху