Funkcja zwracająca wiele wierszy

Funkcja zwracająca wiele wierszy
darkrat
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 203
0

Zadając pytanie w sql, dostajemy nieraz wiele wierszy, które bardzo łatwo możemy np. zapisać w tabeli, używając funkcji:

Kopiuj
foreach($result as $row)

Przykładowo. Aktualnie tworzę funkcję, która zawiera wiele danych osobowych (imię, nazwisko, wiek, miasto). Pytanie: Jak to zwrócić w taki sam sposób? Nie byłoby problemem, gdybym zwracał jedną rubrykę (jedno imię, nazwisko, wiek), wszystko wtedy można wpakować do tablicy asocjacyjnej i jest po kłopocie. Ale jak w przypadku operowania na dużej ilości wierszy, które następnie chcę zwrócić w formie jednej tablicy, gdzie następnie każdy z nich zostanie "przemielony" przez foreach? Myślałem o tablicy dwuwymiarowej, ale wpisując do niej unikatowe id jako identyfikujące pojedynczą osobę, nie wiedzielibyśmy, które wiersze tej tablicy są wypełnione jaką liczbą.

mr_jaro
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Grudziądz/Bydgoszcz
  • Postów: 5300
2

nie czaje, możesz jaśniej? Chcesz stworzyć tablice dwuwymiarowa gdzie pierwszy wymiar to id unikalne a nie key a drugi wymiar to tekst? No i w czym problem? możesz przecież odczytać ten "id"

Kopiuj
foreach ($array as $id => $value) {
     ...
}
darkrat
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 203
0

Nie ma problemu z utworzeniem tablicy dwuwymiarowej (ale co do jej charakteru, to tak jak napisałeś: pierwszy wymiar to id charakteryzujące jednoznacznie osobę, a dalsze wymiary to string (je już znamy za każdym razem)). Mój problem był taki, że nie wiedziałem, jak tego foreacha użyć w takim wypadku.Więc czy zadziałałby taki zapis jak poniżej?

Kopiuj
 public static function calculateAverage($number, $finalDetails, $f, $m)
    {
        $finalDetails[$number]['femAvgRate'] /= $f;
        $finalDetails[$number]['femAvgAge'] /= $f;
        $finalDetails[$number]['maleAvgRate'] /= $m;
        $finalDetails[$number]['maleAvgAge'] /= $m;

        return $finalDetails;
    }

Odbieramy funkcję:

Kopiuj
$result =  calculateAverage($number, $finalDetails, $f, $m);
$foreach($result as $row)
{
echo $row['maleAvgAge'];
}
mr_jaro
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Grudziądz/Bydgoszcz
  • Postów: 5300
1

Tak

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 339
0
darkrat napisał(a):

Nie ma problemu z utworzeniem tablicy dwuwymiarowej (ale co do jej charakteru, to tak jak napisałeś: pierwszy wymiar to id charakteryzujące jednoznacznie osobę, a dalsze wymiary to string (je już znamy za każdym razem)). Mój problem był taki, że nie wiedziałem, jak tego foreacha użyć w takim wypadku.Więc czy zadziałałby taki zapis jak poniżej?

Kopiuj
 public static function calculateAverage($number, $finalDetails, $f, $m)
    {
        $finalDetails[$number]['femAvgRate'] /= $f;
        $finalDetails[$number]['femAvgAge'] /= $f;
        $finalDetails[$number]['maleAvgRate'] /= $m;
        $finalDetails[$number]['maleAvgAge'] /= $m;

        return $finalDetails;
    }

Odbieramy funkcję:

Kopiuj
$result =  calculateAverage($number, $finalDetails, $f, $m);
$foreach($result as $row)
{
echo $row['maleAvgAge'];
}

A czym tutaj jest number? sprawdzałeś chociaż strukturę tej tablicy przez print_r? to byś wiedział czemu masz notice...
Skoro w wywołaniu podajesz tylko jeden numer to po co pętla? wystarczy sie odwoływać $ar[numer][string]

Neutral
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polanów
  • Postów: 151
1

Może użyj takiej konstrukcji:

Kopiuj
$row = $result->fetch_array(MYSQLI_NUM);

Zamiast MYSQLI_NUM możesz wpisać inną stałą, np.: MYSQLI_ASSOC.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.