2012-04-18 3 views
7

Я хочу создать массив ассоциативных массивов в цикле while. В каждой итерации цикла while я хочу добавить новый элемент в массив. Как я могу это сделать? После этого я хочу передать этот массив в foreach и распечатать данные. На данный момент у меня есть эта часть кода, но, очевидно, с этим что-то не так.создать массив ассоциативных массивов в PHP

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

У меня есть два массива, и я хочу поместить их в одну переменную. Я использую эту строку кода $ finalarray = $ _SESSION ['SESS_ARRAY'] + $ myarray ;. Но он возвращает мне фатальную ошибку. Вы можете мне помочь? – anna

+0

Я решил его использовать array_merge(). – anna

ответ

16

Чтобы добавить элемент в конце использования массива []
Пример:

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

Спасибо! Я делал изменения, и я забыл вернуть это обратно. – anna

+0

У меня есть два массива, и я хочу поместить их в одну переменную. Я использую эту строку кода $ finalarray = $ _SESSION ['SESS_ARRAY'] + $ myarray ;. Но он возвращает мне смертельную ошибку. Вы можете мне помочь? – anna

+0

вы не можете добавить два массива. используйте приведенный выше код. Вот результат: $ finalarray = array(); $ finalarray [] = $ _SESSION ['SESS_ARRAY']; $ finalarray [] = $ myarray; – laltin

1

Очевидно ваш доступ к $row2 выглядел не так, поэтому я предположил, что здесь, чтобы быть правым

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

Тогда позже, когда вы хотите, чтобы читать из него:

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

Если вы пытаетесь добавить к $ MyArray в каждой итерации, сделать это следующим образом:

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

или как это:

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

Очевидно, хорошо, первый забрать его отдельно так что есть чему поучиться:

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

Эта часть выглядеть в порядке, давайте посмотрим внутри цикла:

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

Существует несколько пунктов. Наверное, самое главное, так как это внутри цикла, вы перезаписываете $myarray на каждой итерации. Вместо этого вы хотите добавить в массив. Давайте сделаем так:

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

После этого вы можете вывести его на доказательство того, что он в основном работает:

var_dump($myarray); 

Это показывает вам массив, содержащий все строки. . После этого нужно всего лишь изменить запрос к базе данных, так что он возвращает только поля, которые вы заинтересованы в

В случае, если вы не можете сделать это с базой данных, вы можете управлять массивом, а также:

$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); 

Теперь результат должен выглядеть так, как вы хотите. Для вывода $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>' 
} 
Смежные вопросы