Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Rozdzielenie danych
Forum PHP.pl > Forum > Przedszkole
duk
Witam

Mam problem, gdyż nie wiem jak się do tego zabrać.
Mam w bazie rekordy i w jednym polu wartości typu
Cytat
Jan Kowalski (Jan Kowalski), Tomasz Nowak (Tomasz Nowak)
Nie zawsze to co znajduje się w nawiasie to to samo co przed nim. I teraz chodzi mi o to, abym mógł tymi nazwiskami posługiwać się oddzielnie w dwóch różnych zmiennych. Za pomocą zapytania do mysql pobieram te dane i mam je w całości w jednej zmiennej i nie wiem co dalej. Myślałem żeby za pomocą explode usunąć przecinek, ale nie wiem co zrobić, aby te nazwiska z nawiasu wydostać do nowej zmiennej.

W jaki sposób mogę tego dokonać?

Pozdrawiam.
dstp
$nowa_zmienna = explode(",", $zmienna_z_bazy);
echo $nowa_zmienna[1];
duk
Nie o to mi chodziło, bo o rozbiciu przy explode pisałem już sam.

Jeśli zastosuję coś takiego to $nowa_zmienna[1]; da mi Jan Kowalski (Jan Kowalski) a echo $nowa_zmienna[2]; Tomasz Nowak (Tomasz Nowak)
A ja chcę, aby $nowa_zmienna[1]; dało mi Jan Kowalski $nowa_zmienna[2]; Tomasz Nowak a $jeszcze_inna_zmienna[1]; Jan Kowalski itd.

Teraz chyba jest jaśniej o co mi chodzi wink.gif
Tylko właśnie nie wiem jak mogę to osiągnąć.
nospor
No to wyrażenia regularne, preg_match_all()
duk
Tak szczerze mówiąć to z wyrażami regularnymi nie miałem jeszcze nigdy styczności.
Mogę prosić o jakąś większą wskazówkę? chociaż kawałek kodu, który zrobi to co potrzebuję, bo kompletnie nie wiem jak to tu użyć, czy mam stosować jeszcze wcześniej explode() czy nie.

Pozdrawiam
qrzysztof
Najpierw rozbijasz za pomocą explode() z przecinkiem jako delimiterem a potem dla każdego kawałka

  1. $zmienna='Jan Kowalski (Marian Nowak)';
  2. preg_match_all('/^([a-zA-Z\s]+)\(([a-zA-Z\s]+)\)$/', $zmienna, $podzielone);
  3.  
  4. echo '<pre>';
  5. print_r($podzielone);
  6. echo '</pre>';


Zamiast echo() możesz sobie z tablicą $podzielone zrobić oczywiście coś innego.
Gość
Czyli mam zrobić coś w tym stylu?
  1. $nowa_zmienna = explode(",", $zmienna);
  2. $zmienna = implode("", $nowa_zmienna);
  3. preg_match_all('/^([a-zA-Z\s]+)\(([a-zA-Z\s]+)\)$/', $zmienna, $podzielone);
  4.  
  5. echo '<pre>';
  6. print_r($podzielone);
  7. echo '</pre>';


Bo później w preg_match_all nie mogę operować na tablicy z explode więc muszę wrócić do stringa, ale chyba jednak coś źle dalej robię, bo później tablica jest pusta.
qrzysztof
  1. <?php
  2. $zmienna=' Jan Jankowski (Marian Nowak), Euzebiusz Maliniak (Witold Kwiatkowski)';
  3. $po_explode=explode(',', $zmienna);
  4. foreach ($po_explode as $element_tablicy) {
  5. preg_match_all('/^([a-zA-Z\s]+)\(([a-zA-Z\s]+)\)$/', $element_tablicy, $podzielone);
  6.  
  7. echo '<pre>';
  8. print_r($podzielone);
  9. echo '</pre>';
  10. }
duk
Ok, wielkie dzięki. Działa, ale jest jedno ale.

To ma się rozbijać wszystko na osobne tablice? Bo myślałem, że w jednej tablicy będę miał nazwiska, które są przed nawiasem, a w drugiej te, które są w nawiasie. I wtedy wyświetliłbym sobie to za pomocą echo, a teraz nie mam pojęcia jak za pomocą echo mogę to wyświetlić.

print_r daje taką strukturę
  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [0] => Jan Nowak (Mateusz Kowalski)
  6. )
  7.  
  8. [1] => Array
  9. (
  10. [0] => Jan Nowak
  11. )
  12.  
  13. [2] => Array
  14. (
  15. [0] => Mateusz Kowalski
  16. )
  17.  
  18. )
  19.  
  20. Array
  21. (
  22. [0] => Array
  23. (
  24. [0] => Jacek Nowacki (Jan Kowalski)
  25. )
  26.  
  27. [1] => Array
  28. (
  29. [0] => Jacek Nowacki
  30. )
  31.  
  32. [2] => Array
  33. (
  34. [0] => Jan Kowalski
  35. )
  36.  
  37. )
  38.  
  39. Array
  40. (
  41. [0] => Array
  42. (
  43. [0] => Karol Nowak (Piotr Piotrowski)
  44. )
  45.  
  46. [1] => Array
  47. (
  48. [0] => Karol Nowak
  49. )
  50.  
  51. [2] => Array
  52. (
  53. [0] => Piotr Piotrowski
  54. )
  55.  
  56. )
Trobin
Praktycznie tak samo, tylko, że tu masz o jeden wymiar więcej. Jeżeli np. Twoja zmienna nazywa się $nazwiska, to wystarczy, że napiszesz $nazwiska[0][1][0] i wyświetli Jan Nowak. Jeżeli napiszesz $nazwiska[0][2][0] to wyświetli Mateusz Kowalski. Analogicznie wyświetlisz resztę :-).
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.