Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Rozdzielenie danych
-duk-
post 30.11.2011, 17:58:00
Post #1





Goście







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.
Go to the top of the page
+Quote Post
dstp
post 30.11.2011, 17:59:26
Post #2





Grupa: Zarejestrowani
Postów: 84
Pomógł: 0
Dołączył: 28.07.2011

Ostrzeżenie: (10%)
X----


$nowa_zmienna = explode(",", $zmienna_z_bazy);
echo $nowa_zmienna[1];
Go to the top of the page
+Quote Post
-duk-
post 30.11.2011, 18:20:08
Post #3





Goście







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ąć.
Go to the top of the page
+Quote Post
nospor
post 30.11.2011, 18:24:29
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to wyrażenia regularne, preg_match_all()


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
-duk-
post 1.12.2011, 16:31:32
Post #5





Goście







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
Go to the top of the page
+Quote Post
qrzysztof
post 1.12.2011, 18:54:54
Post #6





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował qrzysztof 1.12.2011, 18:58:48


--------------------
Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
Go to the top of the page
+Quote Post
-Gość-
post 1.12.2011, 19:41:42
Post #7





Goście







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.
Go to the top of the page
+Quote Post
qrzysztof
post 1.12.2011, 21:14:38
Post #8





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

Ostrzeżenie: (0%)
-----


  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. }


--------------------
Znalazłeś sam rozwiązanie swojego problemu? Nie pisz "już wiem, do zamknięcia". Podziel się rozwiązaniem - inni będą mieli łatwiej.
Go to the top of the page
+Quote Post
-duk-
post 2.12.2011, 13:29:23
Post #9





Goście







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. )
Go to the top of the page
+Quote Post
Trobin
post 2.12.2011, 13:39:42
Post #10





Grupa: Zarejestrowani
Postów: 82
Pomógł: 6
Dołączył: 23.03.2008
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


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ę :-).

Ten post edytował Trobin 2.12.2011, 13:40:46


--------------------
Pracuję na: Apache 2.2.4, MySQL 5.0.20a, PHP 5.3.0
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 16:57