Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyciąganie konkretnych wartości z unserializowanych danych
Forum PHP.pl > Forum > Przedszkole
userkare
Dopiero zaczynam php i mam problem. Mam zasierializowane dane w bazie. Już je unserializowałem i chcę zrobić taką operację.

Otóż mam tam tablice typu:
"tochce_qdwqWQDdqwDQWQWDqwdwdqQWDQWDQWDQWDqwd"
"tochce_FaWEFWEGgewwegWEGWEGWEGwegWEGWEGWEG"
"tochce_FEWEEWEFFEVWEWEVWEVVWEWEVWEVWEVWEVWEV"
"tochce_VEVWWEVWEVWEVWEVWEGERGWEGEWEGWWEGWEGWEG"

Tworzę sobie zmienną zawierającą wartość, którą przechowuje ta tablica na zasadzie.

$var = $var1["tochce_qdwqWQDdqwDQWQWDqwdwdqQWDQWDQWDQWDqwd"];

Teraz przechodzę do sedna. Jak zrobić, żeby nie podawać za każdym razem nazwy tej tablicy i tworzyć niepotrzebnie osobnych zmiennych.

Interesuje mnie po prostu wszystko co zawiera "tochce_". Czyli jak zrobić w phpie jak w sql "tochce_%"? Z góry dzięki! smile.gif
Pyton_000
pokaż kod bo zamotałeś jak kot kłębek wełny.
Crozin
W pętli iterującej po każdym elemencie tablicy (foreach) sprawdzasz czy klucz zaczyna się od tochce_ (strpos) i jeśli nie (if) przerywasz przetwarzanie obecnego elementu i przechodzisz do następnego (continue).
userkare
@Crozin dzięki za info na temat strpos, ale zastanawiam się jak miałbym tutaj to wykorzystać. Opiszę poniżej mój problem bardziej szczegółowo.

Mam w bazie jak już mówiłem wartości typu:

wartosc1_blabla
wartosc1_blffwfew
wartosc1_[...]
wartosc2_blabla
wartosc2_blffwfew
wartosc2_[...]

Wartości w takim schemacie jest 7, czyli załóżmy od wartosc1 do wartosc7. Schemat jest na zasadzie wartosc_[numer]_[hash]. Hashy jest zbyt dużo, żeby z palca tworzyć każdą zmienną. Zawartość takiej tablicy przenoszę do odpowiednich dla niego kolumn w bazie czyli wartosc1, wartosc2, wartosc3 [...] w przypadku gdy istnieje taka wartość.

Czy miałbym zrobić w takiej sytuacji 7 pętli foreach dla każdej wartości?

Obecnie dla przykładowej wartości wszystko mi działa gdy podaję całą pełną wartość i mam to rozwiązane tak jak poniżej. Z góry przepraszam za jakość kodu, ale jestem początkującym.

  1. while($rowtest = mysql_fetch_assoc($json_obj)){
  2.  
  3. $rowcast=array ($rowtest["wartosci"]);
  4. $comma_separated = implode(",", $rowcast);
  5. $emp_data = unserialize($comma_separated);
  6.  
  7. var_export($emp_data);
  8.  
  9. $wartosc1_blabla = $emp_data["wartosc1_blabla"];
  10.  
  11. if (!empty($wartosc1_blabla)){
  12. $wartosc1_po = $wartosc1_blabla;
  13. echo "Wartość wynosi ".$wartosc1_blabla;
  14. }
  15. else{
  16. $wartosc1_po="0";
  17. echo "<br />";
  18. }


Teraz wyszukałem jeszcze funkcję preg_grep która idealnie by tutaj psowała tylko, że szuka po wartościach, a ja chciałbym po kluczach w mojej tablicy asocjacyjnej. Czy ktoś ma pomysł jak można by to zrobić.

Tutaj przykład jak chciałbym to zrobić. Ta operacja poniżej przeszuka mi tylko po wartościach i nie wiem jak zrobić to po kluczach.
  1. $wartosc1_blabla = preg_grep ("/^wartosc1_blabla .*/", $emp_data);


////
Jestem coraz bliżej, znalazłem już preg_array_key_exists smile.gif
Regz
http://rtfm.killfile.pl/ - Lubię Kaję więc polecam RTFM.


Jeśli możesz to wykonaj to i pokaż co zwraca

  1. <?php
  2.  
  3.  
  4. $wartosci = [];
  5.  
  6. while($rowtest = mysql_fetch_object($json_obj))
  7. {
  8. $wartosci[] = $rowtest->wartosci;
  9. }
  10.  
  11. foreach($wartosci as $klucz => $wartosc)
  12. {
  13. echo 'klucz: ' . $klucz . PHP_EOL;
  14. echo 'wartosc: ' . $wartosc . PHP_EOL . PHP_EOL;
  15. }
userkare
Dobra udało mi się uzyskać pożądany efekt przy pomocy preg_grep, ale mam jeszcze problem. Wydaje mi się, że dla Was raczej banalny.

Mam sytuacje gdzie jest taka kombinacja:

[wartosc1_blabla==] => 5
[wartosc2_blabla=] => 3
[wartosc3_blabla==] => 1

  1. $wartosc1_blabla = preg_grep ("/^wartosc1_blabla.*/", array_keys($emp_data));
  2. $wartosc1_blabla_af = $emp_data[$wartosc1_blabla[0]];
  3.  
  4. $wartosc2_blabla = preg_grep ("/^wartosc2_blabla.*/", array_keys($emp_data));
  5. $wartosc2_blabla_af = $emp_data[$wartosc2_blabla[1]];
  6.  
  7. $wartosc3_blabla = preg_grep ("/^wartosc3_blabla.*/", array_keys($emp_data));
  8. $wartosc3_blabla_af = $emp_data[$wartosc3_blabla[2]];


W tym momencie wszystko wykonuje się poprawnie gdy podaję mu numer indeksu ręcznie. Po kolei 1, 2, 3. Gdy zostawiłem mu wszędzie samo [0] to wykonuje się poprawnie tylko dla wartosc1_blabla co jest prawidłowe. Pytanie jak zrobić tak, żeby z automatu brało wszystkie elementy z tablicy tam gdzie pojawia się jakaś wartość? Nie znam się na tym dlatego pytam. Będę szczerze wdzięczny za pomoc.

////
Z tego co wyczytałem mógłbym też użyć pętli foreach, ale nie wiem do końca jak to ze sobą powiązać. Czy ktoś ma jakiś pomysł?
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.