ForumCała strona

Nawigacja

Aktualnie online

Gości online: 22

Użytkowników online: 0

Łącznie użytkowników: 25,400
Najnowszy użytkownik: AlojzyBartek

Logowanie

Nazwa użytkownika

Hasło



Zarejestruj się

Odzyskaj hasło

Shoutbox

Musisz zalogować się, aby móc dodać wiadomość.

Zbigniew@
17.11.2024 11:33:24
Nie ten grzeszy kto pije, ale ten, kto się nie upije.

JazOOn
16.11.2024 20:46:18
tja

Zbigniew@
15.11.2024 18:58:17
Kto pije, ten nie bije.

JazOOn
31.10.2024 20:49:47
Kto pije?

piterus
30.10.2024 19:45:48
I będziemy śpiewać: "Kiedy 20 blisko, przebadaj wszystko, przebadaj wszystko..." Pfft

Pobierz nową wersję
Pobierz podręcznik
Zobacz inne oficjalne Supporty
Statystyki supportu
PHP-Fuson PL na Facebooku

RSS

Polecamy hosting SferaHost.pl

Zobacz temat

 Drukuj temat
[PHP] preg_replace - wyławianie tekstu NIE zawierającego danego słowa (konwerter xml -> mysql)
QooBooS
Witam.
Próbuję stworzyć konwerter, który z kodu zrobi mi zapytanie do bazy MySQL.
Mam przykładowo taki kod:
Pobierz kod źródłowy  Rozwiń Kod źródłowy

Jakiego wzoru użyć dla funkcji preg_replace, by wyłowić z kodu całe sekcje (od <string> do </string>) zawierające taki sam początek w <name></name>, różniące się końcówką, nie usuwając przy okazji innych?
Jak na razie napisałem trzy linijki usuwające niepotrzebne rzeczy z kodu:
Pobierz kod źródłowy  GeSHi: PHP
  1. $co = array("<string>", "</string>", "\r\n", "\r", "\n", "\t", " ");
  2. $na_co = "";
  3. $tekst = str_replace($co, $na_co, $tekst);
Zinterpretowano w sekund: 0.016, wykorzystano GeSHi 1.0.8.10


Po przepuszczeniu przez taki "filtr" otrzymam coś takiego:
Pobierz kod źródłowy  Rozwiń Kod źródłowy

Jak na razie jest dobrze. Teraz chciałbym, aby obok siebie znalazły się wpisy z tym samym początkiem "name", czyli powyższy przykład powinien wyglądać:
Pobierz kod źródłowy  Rozwiń Kod źródłowy

Dodatkowo, sekcja z DESC powinna być przed Abnormal, czyli druga i trzecia sekcja powinny być zamienione miejscami. Problem w tym, że nie wiadomo w jakiej kolejności one występują (nieraz Abnormal jest zupełnie przed tym bez końcówki, nieraz za. To samo tyczy się DESC).
Następnie chciałbym, aby z uporządkowanego kodu utworzyć zapytanie do bazy danych, które wstawiałoby wszystko po kolei do jednej tabeli w takiej formie:

Pobierz kod źródłowy  GeSHi: MySQL
  1. INSERT INTO sl_skille (`id_z_gry`, `id_z_gry_desc`, `id_z_gry_abnormal`, `name`, `nazwa`, `opis`) VALUES (id_bez_koncowki, id_desc, id_abnormal, name_bez_koncowki, body_bez_koncowki, body_desc."=====".body_abnormal), (id_bez_koncowki, id_desc, id_abnormal, name_bez_koncowki, body_bez_koncowki, body_desc."=====".body_abnormal), (...), (...);
Zinterpretowano w sekund: 0.005, wykorzystano GeSHi 1.0.8.10


Chodzi o to, aby wsadzić odpowiednie dane do odpowiednich komórek i połączyć DESC i Abnormal w jedno, oddzielając je pięcioma znakami równości (ot tak, żeby łatwo można było je oddzielić).
Być może poradziłbym sobie sam, jednak nie wiem, jak zmusić kompilator do wyszukania name bez końcówki, np. tak:
Pobierz kod źródłowy  Rozwiń Kod źródłowy

Problem w tym, że w tekst w nawiasach kwadratowych traktowany jest jako osobne litery, więc odrzuci także te, które nie mają końcówki, a zawierają podane litery.
Edytowane przez Pieka dnia 28.02.2010 16:16:55
 
Wścibski Gość
Dodany dnia 24.11.2024 23:39:39
Pan Kontekstualny

Postów: n^x
Data rejestracji: Zawsze

Polecamy hosting SferaHost.pl
IP: localhost  
SebaZ
Ten Twój kod to XML, więc użyj jakiejś zabawki do parsowania XML'a Smile
Zadawanie pytań na forum to nie jest prawo, to jest przywilej, którego każdy może być pozbawiony jeżeli nie będzie umiał z niego korzystać. Nie wymagaj więc natychmiastowej odpowiedzi.
 
bartek124
Pakujesz to do simplexml na przyklad i obrabiasz w tym. Bedzie na pewno szybciej, niż bawic sie w wyrazenia regularne.
userbar_bartek124_net.png mw.gif Nie pomagam na komunikatorach oraz PW!
 
www.bartek124.net
QooBooS
Dzięki za podpowiedź, SimpleXML wydaje się być prosty w użyciu, jednak nie umiem go wykorzystać w tej sytuacji. Rozwiązałbym to tak:
- sortuj wszystkie elementy alfabetycznie według name (niech już stracę, Abnormal niech będzie przed DESC)
- przekonwertuj je po kolei na formę MySQL'ową ('id', 'nazwa'... itd.) poprzez wyciągnięcie każdego z tych podelementów z osobna i odpowiednie wstawienie ich w zapytanie.

Pytanie: W jaki sposób wykonać takie sortowanie? Jeśli wczytam wszystkie elementy do tablicy, np. wszystkie string, to nie wiem, jak się odwołać do podelementów name, by w odpowiedniej kolejności ustawić ich elementy nadrzędne (string).

EDIT: Wymyśliłem coś. Może nie jest to wydajny sposób, nie znam się, ale działa :) Chodzi o sortowanie wpisów z xmla przy użyciu php poprzez wyodrębnienie ich do osobnych tablic i użycie funkcji array_multisort();
poniżej zamieszczam mój kod:
Pobierz kod źródłowy  GeSHi: PHP
  1. <?php
  2. header('Content-Type: text/html; charset=utf-8');
  3. $xml = simplexml_load_file("skille.xml");
  4. foreach ($xml -> string as $value)
  5. {
  6. $id&#91;&#93; = (string)$value -> id;
  7. }
  8. foreach ($xml -> string as $value)
  9. {
  10. $name&#91;&#93; = (string)$value -> name;
  11. }
  12. foreach ($xml -> string as $value)
  13. {
  14. $body&#91;&#93; = (string)$value -> body;
  15. }
  16. array_multisort($name, $id, $body);
  17. ?>
Zinterpretowano w sekund: 0.018, wykorzystano GeSHi 1.0.8.10

(&#91; i &#93; to nawiasy kwadratowe [ i ])
Teraz wystarczy foreach'em przejechać po wszystkich elementach którejkolwiek z tablic, używając tego samego indeksu i zrobić z nimi, co się żywnie komu podoba (np. je wyświetlić).
Pobierz kod źródłowy  GeSHi: PHP
  1. foreach($name as $key => $value)
  2. {
  3. echo $id&#91;$key&#93;."<br/>".$name&#91;$key&#93;."<br/>".$body&#91;$key&#93;."<br/></br>";
  4. }
Zinterpretowano w sekund: 0.021, wykorzystano GeSHi 1.0.8.10

Problem tkwi tu w kodowaniu znaków - plik jest w utf-8, nagłówek xml'a informuje o utf-8, a i tak na stronie wychodzą krzaczki... Jak temu zaradzić?
Edytowane przez QooBooS dnia 01.03.2010 00:51:16
 
bartek124
Przeglądarka także musi wiedzieć, że to utf8.
Pobierz kod źródłowy  Rozwiń Kod źródłowy


Na razie nie mam czasu spojrzeć na skrypt, jeśli znajdę chwilę to zobacze co i jak :)
userbar_bartek124_net.png mw.gif Nie pomagam na komunikatorach oraz PW!
 
www.bartek124.net
QooBooS
Zgoda, wysyłam header do przeglądarki za pomocą php i nie działa. Spróbuję zrobić to jako echo htmla, może pomoże. Dam znać co wyszło Smile

EDIT: Jednak działa... Nie działało w programie, w którym to sprawdzałem (HateML Pro). Widocznie ma ustawione inne kodowanie. W Firefoxie działa bezbłędnie Smile Dzięki za pomysł z simplexml, tak bym się męczył pewnie z kilka dni Smile
Edytowane przez QooBooS dnia 01.03.2010 18:59:03
 
Przejdź do forum:
Created by Arox Copyright (C) 2004
Copyright (C) 2004 - 2018 Ekipa PHP-Fusion.pl