Разбить строку по элементам и в массив

Статус
В этой теме нельзя размещать новые ответы.

helenfly

Создатель
Регистрация
6 Мар 2009
Сообщения
18
Реакции
0
В результате парсинга сайта у меня получилась строка:

Autoconverter 1 RUR yandex 0.950 WMR 131,573 Megaexchange 1 RUR yandex 0.950 WMR 37,704 Меняла.ру 1 RUR yandex 0.945 WMR 546,467 Safechange.ru 1 RUR yandex 0.944 WMR 21,572 GrandExchange 1 RUR yandex 0.940 WMR 170,991 Netexchange 1 RUR yandex 0.940 WMR 519,988

Требуется разбить эту строку, и записать в многомерный массив, чтобы получилось так:

Autoconverter::1 RUR yandex::0.950 WMR::131,573
Megaexchange::1 RUR yandex::0.950 WMR::37,704
Меняла.ру::1 RUR yandex::0.945 WMR::546,467

и т.д.
 
ну в чем проблема?
explode'ом по пробелам режете. всегда же фиксированное число элементов?

Потом по массиву проходишься с шагом=числу элементов и делаешь новый массив.
 
Примерно так:
PHP:
$txt = 'Autoconverter 1 RUR yandex 0.950 WMR 131,573 Megaexchange 1 RUR yandex 0.950 WMR 37,704 Меняла.ру 1 RUR yandex 0.945 WMR 546,467 Safechange.ru 1 RUR yandex 0.944 WMR 21,572 GrandExchange 1 RUR yandex 0.940 WMR 170,991 Netexchange 1 RUR yandex 0.940 WMR 519,988';
$pt = "#.*? \d* RUR yandex \d*\.\d* WMR \d*,\d*#";
preg_match_all($pt, $txt, $arr);
//print_r($arr);
$arr_val = array();
foreach ($arr[0] as $key => $val) {
	$val = trim($val);
	$arr_val[] = str_replace(" ", "::", $val);
}
print_r($arr_val);
Это на скорую руку. Вероятно регулярку можно написать намного симпатичнее и корректнее.

P.s.: Использовать в том случае, если формат строки типичен приведенному в первом посте примеру
 
Возвращается пустой массив, видимо регулярка неправильная.:confused:
 
PHP:
<?
$string="Вася::Петров::25::";
$array=explode("::",$string);
echo "Имя: ".$array[0].", фамилия: ".$array[1].", возраст: ".$array[2]; 
?>
если не так, то в любом случае split и explode вам в помощь
 
Какие регулярки, люди? explode и все.
 
Возвращается пустой массив, видимо регулярка неправильная.:confused:
Прежде чем выложить код я всегда его проверяю на работоспособность ;)
Может не полностью скопировал?

2tOos, приведи код на примере этой строки.
 
2tOos, приведи код на примере этой строки.
на explode тоже вполне нормально получается(если пробелы везде одинарные:(
PHP:
<?php
$str=<<<End_of
Autoconverter 1 RUR yandex 0.950 WMR 131,573 Megaexchange 1 RUR yandex 0.950 WMR 37,704 Меняла.ру 1 RUR yandex 0.945 WMR 546,467 Safechange.ru 1 RUR yandex 0.944 WMR 21,572 GrandExchange 1 RUR yandex 0.940 WMR 170,991 Netexchange 1 RUR yandex 0.940 WMR 519,988
End_of;
$str=explode(" ",$str);
$array=array();
for($q=0;$q<(count($str)/7);$q++){
$array[]= $str[$q*7]."::".$str[$q*7+1]." ".$str[$q*7+2]." ".$str[$q*7+3]."::".$str[$q*7+4]." ".$str[$q*7+5]."::".$str[$q*7+6];
}
var_dump($array);
?>
 
Arqin написал(а):
Прежде чем выложить код я всегда его проверяю на работоспособность
Незнаю каким образом он у тя работает но тот что ты привел выведет пустой массив
Так как он ниче не вернет :)
в данном случае ты написал реглурку для поиска а не для возврата
PHP:
txt = 'Autoconverter 1 RUR yandex 0.950 WMR 131,573 Megaexchange 1 RUR yandex 0.950 WMR 37,704 Меняла.ру 1 RUR yandex 0.945 WMR 546,467 Safechange.ru 1 RUR yandex 0.944 WMR 21,572 GrandExchange 1 RUR yandex 0.940 WMR 170,991 Netexchange 1 RUR yandex 0.940 WMR 519,988';
$pt = "#(.*? \d* RUR yandex \d*\.\d* WMR \d*,\d*)#";
preg_match_all($pt, $txt, $arr);
//print_r($arr);
$arr_val = array();
foreach ($arr[1] as $key => $val) {
    $val = trim($val);
    $arr_val[] = str_replace(" ", "::", $val);
}
print_r($arr_val);
так хотябы чето найдет

можно еще такай вариант
PHP:
$txt = 'Autoconverter 1 RUR yandex 0.950 WMR 131,573 Megaexchange 1 RUR yandex 0.950 WMR 37,704 Ìåíÿëà.ðó 1 RUR yandex 0.945 WMR 546,467 Safechange.ru 1 RUR yandex 0.944 WMR 21,572 GrandExchange 1 RUR yandex 0.940 WMR 170,991 Netexchange 1 RUR yandex 0.940 WMR 519,988';
$pt = "#(.*?) (\d*) RUR yandex ([\.0-9]*) WMR ([\,0-9]*)#";
$txt=preg_replace($pt,"\\1::\\2 RUR yandex::\\3 WMR::\\4;",$txt);
$arr=explode(";",$txt);
unset($arr[count($arr)-1]); //удаляем лишний послений елемент
print_r ($arr);
 
Незнаю каким образом он у тя работает но тот что ты привел выведет пустой массив
Так как он ниче не вернет :)
Специально сейчас взял скопировал приведенный мной код в пустой пхп файл. Вот результат:
Код:
Array ( [0] => Autoconverter::1::RUR::yandex::0.950::WMR::131,573 [1] => Megaexchange::1::RUR::yandex::0.950::WMR::37,704 [2] => Меняла.ру::1::RUR::yandex::0.945::WMR::546,467 [3] => Safechange.ru::1::RUR::yandex::0.944::WMR::21,572 [4] => GrandExchange::1::RUR::yandex::0.940::WMR::170,991 [5] => Netexchange::1::RUR::yandex::0.940::WMR::519,988 )
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху