2012-04-18 24 views
7

Chcę utworzyć tablicę asocjacyjnych tablic w pętli while. W każdej iteracji pętli while chcę dodać nowy element w tablicy. Jak mogę to zrobić? Potem chcę przekazać tę tablicę w foreach i wydrukować dane. Mam tę część kodu na razie, ale oczywiście coś jest nie tak z tym.utworzyć tablicę asocjacyjnych tablic w PHP

while($row2 = mysql_fetch_array($result)) 
{ 
    $myarray = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]); 
          } 
+0

Mam dwie tablice i chcę umieścić je w jednej zmiennej. Używam tego wiersza kodu $ finalarray = $ _SESSION ['SESS_ARRAY'] + $ myarray ;. Ale powraca do mnie fatalny błąd. Możesz mi pomóc? – anna

+0

Rozwiązałem to za pomocą array_merge(). – anna

Odpowiedz

16

Aby dodać element na końcu tablicy: Przykład:

$myarray[] = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]); 
+0

Dziękujemy! Wprowadzałem zmiany i zapomniałem je przywrócić. – anna

+0

Mam dwie tablice i chcę umieścić je w jednej zmiennej. Używam tego wiersza kodu $ finalarray = $ _SESSION ['SESS_ARRAY'] + $ myarray ;. Ale powraca do mnie fatalny błąd. Możesz mi pomóc? – anna

+0

Nie można dodać dwóch tablic. użyj powyższego kodu. tutaj jest wynik: $ finalarray = array(); $ finalarray [] = $ _SESSION ['SESS_ARRAY']; $ finalarray [] = $ myarray; – laltin

1

Oczywiście Twój dostęp do $row2 wyglądał źle, więc zakłada się, że tutaj, aby mieć rację

$myarray = array(); 
while($row2 = mysql_fetch_array($result)) { 
    // append something to your array with square brackets [] 
    $myarray[] = array("id"=> $row2['id'], "name" => $row2['name'], "text"=>$row2['text']); 


    // or to maker this even shorter you could do 
    $myarray[] = $row2; // ... because it has the same array key names 
} 

Później, gdy chcemy odczytać z niego:

foreach($myarray as $val) { 
    echo $val['name'].' (ID: '.$val['id'].') wrote following text: '.$val['text']; 
} 
3

Jeśli próbujesz dodać do $ myarray w każdej iteracji zrobić to tak:

$myarray[] = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]); 

lub tak:

array_push($myarray, array("id"=>$theid, "name"=>name($id), "text"=>$row2[text])); 
6

Oczywiście, dobrze, najpierw odebrać go od siebie więc jest coś do nauczenia się:

while($row2 = mysql_fetch_array($result)) 
{ 
    ... 
} 

Wygląd tej części jest w porządku, zajrzyjmy do pętli:

$myarray = array("id"=>$theid, "name"=>name($id), "text"=>$row2[text]); 

Istnieje wiele punktów. Prawdopodobnie najważniejsze jest to, że w pętli zastępujesz $myarray w każdej iteracji. Zamiast tego chcesz dodać do tablicy. Zróbmy to:

$myarray = array(); # initialize the array first! 
while($row2 = mysql_fetch_array($result)) 
{ 
    $myarray[] = $row2; # add the row 
} 

Po tym można wyprowadzać go na dowód, że to w zasadzie działa:

var_dump($myarray); 

który pokazuje tablicę, która zawiera wszystkie wiersze. . Następnie wystarczy zmienić zapytanie do bazy danych, tak że zwraca tylko pola, które Cię interesują

W przypadku, gdy nie można tego zrobić z bazą danych, można manipulować tablicę, a także:

$myarray = array(); # initialize the array first! 
while($row2 = mysql_fetch_array($result)) 
{ 
    $myarray[] = array(
     "id" => $theid, 
     "name" => name($id), 
     "text" => $row2['text'] 
    ); 
} 
var_dump($myarray); 

Teraz wynik powinien wyglądać tak, jak chcesz. Aby wyprowadzić $myarray:

foreach ($myarray as $number => $row) 
{ 
    echo '<div>Number ', $number, ':<dl>'; 
    foreach ($row as $k => $v) 
    { 
     printf("<dt>%s</dt><dd>%s</dd>\n", $k, htmlspecialchars($v)); 
    } 
    echo '</dl></div>' 
} 
Powiązane problemy