Разбивка строки в массив

metallic

Новичок
Разбивка строки в массив

Есть один массив $mass1 такого содержания:
(каждая строка - это элемент массива)

80.24.23.12 10.3.0.10 6 1130 53 1048 17 ppp0
10.3.0.10 217.175.129.39 51 4478 1342 80 6 ppp0
217.175.129.39 10.3.0.10 69 84718 80 1342 6 ppp0
10.3.0.10 81.19.66.19 6 520 1343 80 6 ppp0
10.3.0.10 217.175.129.39 22 2514 1344 80 6 ppp0
81.19.66.19 10.3.0.10 6 1270 80 1343 6 ppp0
217.175.129.39 10.3.0.10 27 29041 80 1344 6 ppp0
10.3.0.10 229.55.150.208 42 8946 1346 1345 17 ppp0

В первый проход цикла

$mass1[0] = 80.24.23.12 10.3.0.10 6 1130 53 1048 17 ppp0

Мне нужно разбить $mass1[0] в еще один массив $mass2 эелементы которого равны:
$mass2[0] = 80.24.23.12
$mass2[1] = 10.3.0.10
$mass2[2] = 6
$mass2[3] = 1130
$mass2[4] = 53
$mass2[4] = 17
$mass2[4] = ppp0

Сделать это так:

$mass2 = explode (" ", $mass1[0]);

не получается, так как между столбцами разное число пробелов, ды и в одном и том же столбце разное расстоние до соседнего столбца в разных элементах массива, в зависимости от количества данных, например:
10.3.0.10 217.175.129.39 51 4478 1342 80 6 ppp0
217.175.129.39 10.3.0.10 69 84718 80 1342 6 ppp0

от 10.3.0.10 до 217.175.129.39 расстояние 13 пробелов, а от 217.175.129.39 до 10.3.0.10 всего 3 пробела.

Как мне решить задачу?

-~{}~ 27.04.06 11:57:

Блин форум всю табличку похерил :(
Он что лишние пробелы убирает?
 

Tor

Новичок
str_replace(' ',' ',$string)

// заменить каждые два пробела на один

-~{}~ 27.04.06 10:59:

з.ы. кстати, там точно пробелы, не табуляция?
 

metallic

Новичок
Tor
спасибо! я до такого не догадался :)
Делаю несколько раз str_replace(' ',' ',$string) пока по одному пробелу не останется а патом нормально все разбивается
Криво конечно но работает
 

metallic

Новичок
Andreika

Спасиб, все работает, если не сложно объясни что значит запись #\s+#
 

clops

Новичок
\s+ — один и более знаков пробела (в них входят и тебы тоже)
 

Raul

Новичок
Не въехал :(
почему работает с \s+
вроде должно
\s{2,}
нет?

Сорри спутал с preg_replace :eek:
 

hussar

In code we trust!
Прочитай внимательно в мане про эту функцию, потом прочитай внимателько какая задача ставилась в этом топике... После этого ты должен понят что trim() здесь абсолютно не при чем!
 

metallic

Новичок
#!/usr/bin/php
<?

//------------------------------------------------------------------------------------
// Script Dumping traffic
//------------------------------------------------------------------------------------

include ("/usr/local/vpnms/share/http/includes/config.inc.php");
include ("/usr/local/vpnms/share/http/includes/classes.inc.php");

$db = new db();
$db->Connect();

$cmd = "rsh localhost show ip accounting | grep 10.3.0";

exec($cmd, $result);
exec("rsh localhost clean ip accounting");

for ($i=0; $i < count($result); $i++ ) {
$mass = preg_split('#\s+#', $result[$i]);
$db->query("INSERT INTO `ipcad` ( `Source` , `Destination` , `Packets` , `Bytes` , `SrcPt` , `DstPt` , `Proto` , `IF` ) VALUES ('".$mass[1]."', '".$mass[2]."', '".$mass[3]."', '".$mass[4]."', '".$mass[5]."', '".$mass[6]."', '".$mass[7]."', '".$mass[8]."')");

}


$db->close();
?>


Вот так у меня все заработало, всем спасибо.
 

Acabar

Новичок
hussar
Извиняюсь, я всю жизнь думал что она удаляет все лишние пробелы..=]
 
Сверху