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

Тема в разделе "PHP", создана пользователем helenfly, 13 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. helenfly

    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

    и т.д.
     
  2. t0os

    t0os

    Регистр.:
    21 окт 2007
    Сообщения:
    284
    Симпатии:
    36
    ну в чем проблема?
    explode'ом по пробелам режете. всегда же фиксированное число элементов?

    Потом по массиву проходишься с шагом=числу элементов и делаешь новый массив.
     
  3. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    Примерно так:
    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.: Использовать в том случае, если формат строки типичен приведенному в первом посте примеру
     
  4. helenfly

    helenfly Создатель

    Регистр.:
    6 мар 2009
    Сообщения:
    18
    Симпатии:
    0
    Возвращается пустой массив, видимо регулярка неправильная.:confused:
     
  5. ebony_trader

    ebony_trader Создатель

    Регистр.:
    7 апр 2009
    Сообщения:
    24
    Симпатии:
    6
    PHP:
    <?
    $string="Вася::Петров::25::";
    $array=explode("::",$string);
    echo 
    "Имя: ".$array[0].", фамилия: ".$array[1].", возраст: ".$array[2]; 
    ?>
    если не так, то в любом случае split и explode вам в помощь
     
  6. t0os

    t0os

    Регистр.:
    21 окт 2007
    Сообщения:
    284
    Симпатии:
    36
    Какие регулярки, люди? explode и все.
     
  7. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    Прежде чем выложить код я всегда его проверяю на работоспособность ;)
    Может не полностью скопировал?

    2tOos, приведи код на примере этой строки.
     
  8. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    на 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);
    ?>
     
  9. bunny

    bunny Постоялец

    Регистр.:
    17 мар 2007
    Сообщения:
    66
    Симпатии:
    4
    Незнаю каким образом он у тя работает но тот что ты привел выведет пустой массив
    Так как он ниче не вернет :)
    в данном случае ты написал реглурку для поиска а не для возврата
    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);
     
  10. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    Специально сейчас взял скопировал приведенный мной код в пустой пхп файл. Вот результат:
    Код:
    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 ) 
    
     
Статус темы:
Закрыта.