Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wyrażenia regularne
Forum PHP.pl > Forum > Przedszkole
sasiadstar
Witam serdecznie i na wstępie proszę kogoś o pomoc bo nie daje rady z tymi wyrażeniami sobie rady.
Mam taki skryp
CODE
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dataTemp_=str_replace(",","','",$tablicaTemp);//formatuje kod na zrozumialy dla SQL
//...Jakiś kod
//.....
$sql = "INSERT INTO $nazwaTabeli ($tablicaTemp_)


str_replace bardzo ładnie mi przerabia tablice na dane wejsciowe do bazy danych ale....

orginal
"WEBER,"P329,P330,P331","HN8E ",1,KG,B22,C,0.161,F,0.028,H,0.028,,,,,,,2014-03-28"


kod wyjsciowy wygląda tak
'WEBER','"P329','P330','P331"','"HN8E"','1','KG','B22','C','0.161','F','0.028','H','0.028','','','','','','','2014-03-28';
czyli prawie bo "P329,P330,P331" to wyrażenie nie może być rozbite i powinno wyglądać dak
'"P329,P330,P331"'
Kombinowałem na lewo i prawo z tymi wyrażeniami regularnymi ale nijak mi to nie wychodzi.
Tomplus
Czy 2, 3 i 4 wartość po przecinku jest zawsze stała? Jeżeli tak, to zamiast wyrażeń regularnych usuń " a potem rozbij linię.

  1. $tablicaTemp = str_replace('"', '', $tablicaTemp);
  2. $tablicaExpl = explode(',',$tablicaTemp);
  3.  
  4. $tablicaExpl[1] = "'{$tablicaExpl[1]}','{$tablicaExpl[2]}','{$tablicaExpl[3]}'";
  5. unset($tablicaExpl[2],$tablicaExpl[3]);
  6. foreach ($listaKolumn as $value) {
  7.  
  8. //$listaKolumn, stworzenie listy do zapytania, uwaga na przecinek na końcu
  9. //$bindQuote, stworzenie odpowiedniej liczby zmiennych do wprowadzenia // ?, ?, ?,...
  10. }
  11. $dbh->prepare("INSERT INTO tablica ($listaKolumn) VALUES ($bindQuote)")
  12. foreach ($tablicaExpl as $value) {
  13. $stmt->bind_param("i", $value);
  14. }



Tak z palca na szybko.
sasiadstar
No własnie nie może być
"WEBER,"P329,P330,P331",..."
"WEBER,"P329,P3301",...."
"WEBER,"P329",...."
albo jeszcze więcej wartości ale zawsze są w cudzysłowie bo mają być w jednej komórce.
Ciąg zawsze znajduje się na drugim miejscu.
Chodzi mi własnie o takie wyrażenie rozbij na tablice tam gdzie są przecinki ale pomiń przecinki jeśli napotkasz je w cudzysłowie

Zrobiłem coś takiego co działa ale kod wygląda jak goła d**a mojej teściowej.

CODE
$split=explode('"',$orgin);//pobiera ciag "P329,P330,P331"
$tablicaTemp = preg_replace('/".*,?1"/','@', $orgin);//zamienia tymczasowo "P329,P330,P331" na @
$split2=str_replace(',',"','",$tablicaTemp);//dodaje cudzysłowy
$wynik="'".str_replace('@',$split[1],$split2)."'";//zamienia z powrotem @ na "P329,P330,P331"

Teraz bez względu ile tych P*** w cudzysłowie będzie zawsze pobierze je poprawnie.
nospor
To co tutaj masz to wyglada na zwykle wiersz csv. Uzyj wiec poprostu
http://php.net/manual/en/function.str-getcsv.php
otrzymasz w wyniku tablice elementow a potem rob co ci sie zywnie podoba majac juz tablice bedzie to banalne, np implode()
sasiadstar

facepalmxd.gif
O dzięki ci wielki człowieku.
DZIAŁA!!!!
Teraz to już z górki.
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.