Łączenie i odczyt tablic asocjacyjnych w PHP


(Zbyszekborkowski) #1

Witam,

Mam problem z poprawnym odczytem tablicy asocjacyjnej. Muszę zrobić prostą wyszukiwarkę w Zendzie, ale problem mam z samym PHP.

Zacznę od struktury bazy danych. Są tam tablice Klienci oraz Opisy. Jedna z funkcji wyszukuje daną frazę w tablicy Opisy i pobiera ID klienta. W dalszej kolejności funkcja pobiera dane klientów o wyszukanym ID z tabeli Klienci. Dzieje się to w pętli tak, że każde ID jest brane w kolejnej pętli. Efektem takiego jednego powtórzenia jest jednowymiarowa tablica asocjacyjna (np. array('id' => 'adfef14515', 'name' => 'Jaś Fasola', itd.)). Po każdym powtórzeniu łącze to w jedną tablicę za pomocą funkcji array_merge_recursive($koncowa_tablica, $aktualny_klient).

Nie potrafię poprawnie odczytać danych poszczególnych klientów z $koncowej_tablicy. Robię to w następującej pętli:

foreach($koncowa_tablica as $current) {

  $i = 0;

  $dane = null;

  foreach($koncowa_tablica as $key => $value) {

    $dane[] = $value[$i];

  }

  // tutaj następuje odpowiednie wydrukowanie danych

  $i++;

}

Dane muszą być wydrukowane w różnej kolejności, czasem muszą się powtórzyć i dlatego wrzucam to do tymczasowej tablicy $dane.

Co gorsza, powyższa pętla nie działa idealnie.

Być może kiepsko działa też łączenie wszystkiego do jednej tablicy. Rozważałem rozwiązanie problemu poprzez zastosowanie pętli do komendy SQL, np. 'SELECT * FROM Klienci WHERE id='adga45245' OR id='argqerg945145' OR... ' i w pętli doklejać kolejne 'id'. Na razie wydaje mi się, że byłoby to najlepsze rozwiązanie (jeszcze go nie testowałem) i chyba rozwiązywałoby problem odczytu tablicy z danymi wszystkich wyszukanych klientów.

Odczyt typu $current[$i]['name'] nie działa (nie wiem, czy powinien działać).

Jeśli ktoś wie, jak odbierać dane za pomocą normalnej tablicy, bez kombinowania, byłbym wdzięczny za pomoc.

-- Dodane Cz, 28 maja 2009, 16:25 --

Niestety pomysł z obróbką komendy SQL również nie może być użyty. Dane klientów są zapisane w dwóch tablicach więc nie można tego zrobić w jednym poleceniu.

Musi być pętla.