Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyciągnięcie ciągu
Forum PHP.pl > Forum > PHP
new_user
Mam takie ciągi:
ulica 1, 00-000 MIASTO1
ulica 2, 11-111 Miasto2
33-333 Miasto3, ulica 3
ciągów jest więcej i nie są poukładane są wymieszane raz ulica na początku a miasto i kod na końcu a drugi raz ulica na końcu a miasto i kod na początku.
Jak wyciągnąć tylko kody i miasta. Wszystkie ciągi są pobierane z bazy danych postgres.
nevt
np. tak:
  1. <?php
  2. $adresy = array('ulica 1, 00-000 MIASTO1', 'ulica 2, 11-111 Miasto2', '33-333 Miasto3, ulica 3');
  3. $kody_miasta = array();
  4. foreach($adresy as $adres)
  5. {
  6.    $adres = explode(', ', $adres);
  7.    $kody_miasta[] = is_numeric($adres[0][0]) ? $adres[0] : $adres[1];
  8. }
  9. print_r($kody_miasta);
  10. ?>

powodzenia
qbatoja
  1. <?php
  2. foreach($adresy as $adres){
  3. preg_match_all("|.*([0-9]{2}-[0-9]{3}):space:(.*)[:space:,]?|U",  $adres,
  4.    $out, PREG_SET_ORDER);
  5.  
  6. var_dump($out);
  7.  
  8. }
  9. ?>


na 100% zwalilem wyrazenie regularne pisalem z pamieci, ale to tylko wskazowka.
new_user
Dzięki.

Pomogła już pierwsza odpowiedź ale dzięki za druga wskazówkę na pewno się przyda na przyszłość.

Jednak pojawił się problem następny. Są miasta dwuczłonowe np. Rawa Mazowiecka i tu wycina mi i zostaje sama Rawa a ja potrzebuje zeby wyswietliło całą miejscowość.
Apocalyptiq
Mi ten skrypt z pierwszego posta dobrze wyjmuje miasta dwuczłonowe. Może explodujesz to jeszcze spacją, żeby osobno wyjąć kod i miasto?
new_user
A zapomniałem dodać że exploduje to jeszcze spacja tak jak napisał Apocalyptiq. Musze tak zrobić ponieważ potrzebuje to do osobnych kolumn, jedna kolumna to kod a druga to miasto i wlasnie w drugiej po explodowaniu spacja mam miasto jednoczłonowe a potrzebuje dwuczłonowe. Chyba ze ma ktoś iny pomysł jak rozdzielic kod od miasta np zamiast spacji między kodem a miastem wstawić średnik?

Dobra temat z nie wazny zamotałem się. Już jest OK.

Następny problem może nie dotyczy tego samego tematu ale też ciągów.
Chodzi o to, że mam np taki linijke:
tel. 000 0000000, fax 000 0000000. ul. Jakaś ulica, 00-000 Miasto, woj. wojewodztwo,
ul. Jakaś ulica, 00-000 Miasto, woj. wojewodztwo, tel. 000 0000000, fax 000 0000000.
ul. Jakaś ulica 2, 00-000 Miasto 2, woj. wojewodztwo 2, tel. (111) 1111111, fax (111) 1111111.
ul. Jakaś ulica 3, 00-000 Miasto 3, woj. wojewodztwo 3, tel. (222) 2222222, 2222222, fax (222) 2222222.

kod php mam taki:
  1. <?php
  2. $start = strpos($adres, 'tel.');
  3. $end = strpos($adres, ', ');
  4. $a = substr($adres, $start, $end);
  5. echo $a;
  6. ?>


i wszystko było by ok ale tylko dla tych wierszy w ktorych "tel." występuje na poczatku stringu natomiast dla reszty nie działa mi to jak należy czy ktoś ma pomysł jak to rozwiązać, żeby z całego stringa wyciąć wszystko oprócz telefonów.
erix
  1. Musisz dodać jeszcze długość poszukiwanego ciągu.
  2. substr" title="Zobacz w manualu PHP" target="_manual jako ostatni argument przyjmuje DŁUGOŚĆ, a nie offset ostatniego znaku. winksmiley.jpg
new_user
Dzieki za pomoc.
W podobny sposob proboje wyciagnać adres email z tresci jednak mi to nie wychodzi.
Czy ktos wie jak wyciągnąć cały adres email z treści.
Szukałem w necie i niestety nie udało mi się znaleźć rozwiązania tego problemu.
erix
preg_match_all" title="Zobacz w manualu PHP" target="_manual

Szukaj pod hasłem "regular expressions", akurat ten temat jest baaardzo szeroki.
new_user
Właśnie z tym walcze i niestety nie bardzo wychodzi.

Mam taki kod:
  1. <?php
  2. preg_match_all("([a-zA-Z0-9_-]+@[a-zA-Z0-9_-]*+.[a-zA-Z])", $string, $email );
  3. ?>

i owszem to dziala ale tylko przy mailach takiego typu: mail@mail.pl a już przy bardziej rozbudowanych jak admin.host@host.com.pl juz nie wyswietla mi całego maila. Jak należało by zmienić powyższe wyrażenie żeby wyświetlał mi poprawnie całego maila.
new_user
Poradziłem sobie jakoś jednak teraz mi wyskoczył inny problem z którym już sobie nie mogę poradzić.
Mam taki kod:
  1. <?php
  2. $zmienna1 = "Jakiś tekst bla bla bla 00-000 Nowa Sól dalej jakiś tekst";
  3. $zmienna2 = "00-000";
  4. $zmienna3 = "Nowa Sól";
  5. ?>


każd az tych zmiennych w petli sie zmienia na inna
$zmienna2 to jest kod ten sam co w $zmiennej1, $zmienna3 to jest miasto które jest po kodzie w $zmienna1. Problem polega na tym ze chce teraz ze zmiennej1 wywalić i kod i miasto i żeby została cała reszta. Próbowałem preg_replace, str_replace ale niestety w przypadku gdy w zmienna3 pojawi się polska literka to sobie nie radzi. Robiłęm też przy pomocy iconv ale też nie udało mi się. Jak można to obejść?
nevt
no to chyba masz problem z różnym kodowaniem tych zmiennych, bo kod:
  1. <?php
  2. $zmienna1 = "Jakiś tekst bla bla bla 00-000 Nowa Sól i ąęć dalej jakiś tekst";
  3. $zmienna2 = "00-000";
  4. $zmienna3 = "Nowa Sól i ąęć";
  5.  
  6. echo str_replace(array($zmienna2, $zmienna3), '', $zmienna1);
  7. ?>

działa na 100% (skrypt kodowany w utf-8)...
new_user
Jak wpisałem te zmienne ręcznie do skryptu to owszem działa. A jak robie to na zmiennych pobieranych z bazy to nie działa. Próbowałem te zmienne przelecieć iconv i też nie pomogło.
mike
Cytat(new_user @ 4.12.2008, 10:14:15 ) *
Jak wpisałem te zmienne ręcznie do skryptu to owszem działa. A jak robie to na zmiennych pobieranych z bazy to nie działa. Próbowałem te zmienne przelecieć iconv i też nie pomogło.
Z tego wniosek, że źle to zrobiłeś.
I to tyle co można Ci poradzić/powiedzieć w tej sytuacji bo przecież nie wiadomo co tam napisałeś. Zero pokazanego kodu.
new_user
Oto kod:
  1. <?php
  2. while($pole = pg_fetch_assoc($wiersz)){
  3.    foreach($kody as $num => $kod) {
  4.    $kod = explode(';', $kod);
  5.    if(strstr($pole[zmienna1], $kod[0])==TRUE){
  6.        echo $pole[zmienna1]."<br />";
  7.        } else {
  8. //        echo .$kod[0]."<br />";
  9.    }
  10.    }    
  11.    file_put_contents("./dane.csv", $dane);    
  12. }
  13. ?>


tak wygląda kod:

i wstawiajac w ten kod to:
  1. <?php
  2. echo str_replace(array($kod[0], $kod[1]), '', $pole[zmienna1]);
  3. ?>


nie dziala. Zaznacze ze zmienne
  1. <?php
  2. $kod[0], $kod[1]
  3. ?>
to sa zmienne pobrane z pliku textowego ktory ma format:
00-000;Nowa Sól

Natomiast gdy zamienie kod:
  1. <?php
  2. echo str_replace(array($kod[0], $kod[1]), '', $pole[zmienna1]);
  3. ?>

na taki
  1. <?php
  2. echo str_replace(array($kod[0]), '', $pole[zmienna1]);
  3. ?>

to dziala ale w tej zmiennej nie ma polskich liter.
Próbowałem potraktować zmienne iconv'em:
  1. <?php
  2. $pole[zmienna1] = iconv("UTF-8", "ISO-8859-2", $pole[zmienna1]);
  3. $kod[1] = iconv("UTF-8", "ISO-8859-2", $kod[1]);
  4. ?>


To też nie pomogło
Kod po modyfikacjach:
  1. <?php
  2. while($pole = pg_fetch_assoc($wiersz)){
  3.    foreach($kody as $num => $kod) {
  4.    $kod = explode(';', $kod);
  5.    if(strstr($pole[zmienna1], $kod[0])==TRUE){
  6.            $pole[zmienna1] = iconv("UTF-8", "ISO-8859-2", $pole[zmienna1]);
  7.            $kod[1] = iconv("UTF-8", "ISO-8859-2", $kod[1]);
  8.            echo str_replace(array($kod[0], $kod[1]), '', $pole[zmienna1]);
  9.        } else {
  10. //        echo .$kod[0]."<br />";
  11.    }
  12.    }    
  13.    file_put_contents("./dane.csv", $dane);    
  14. }
  15. ?>
erix
Z tego, co pamiętam, to str_replace" title="Zobacz w manualu PHP" target="_manual uwalał ciągi zapisane w UTF-8.

Najpierw zamieniaj kodowanie dla $kod, potem używaj explode" title="Zobacz w manualu PHP" target="_manual.
new_user
Niestety też nie pomogło. Teraz mam taki kod:
  1. <?php
  2. while($pole = pg_fetch_assoc($wiersz)){
  3.   foreach($kody as $num => $kod) {
  4.   $kod = iconv("UTF", "ISO-8859-2", $kod);
  5.   $kod = explode(';', $kod);
  6.   if(strstr($pole[zmienna1], $kod[0])==TRUE){
  7.           echo str_replace(array($kod[0], $kod[1]), '', $pole[zmienna1]);
  8.       } else {
  9. //        echo .$kod[0]."<br />";
  10.   }
  11.   }    
  12.   file_put_contents("./dane.csv", $dane);    
  13. }
  14. ?>


Teraz mi ucina w ten sposób, że owszem $kod[0] czyli kod na wzrór 00-000 z $pole[zmienna1] wywala natomiast $kod[1] wywala mi w sposób taki ze przycina i zamiast np wyciąć całość to zostawia od napotkania polskiej literki mp:
Komańcza
pod zmienna $kod[1] mam koma
a w $pole[zmienna1] mam ńcza i tekst.
erix
  1. <?php
  2. $kod = iconv("UTF", "ISO-8859-2", $kod);
  3. ?>

A nie przypadkiem UTF-8? tongue.gif
new_user
Sorry tak jest tam utf-8 a nie utf i nie działa ucina tak jak pisałem.
erix
Może kodowanie źródłowe, w bazie, to wcale nie jest UTF-8? Mimo, że masz pola zapisane w bazie jako ten zestaw znaków, to nie muszą być one w nim zakodowane. winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.