【问题标题】:create array of associative arrays in PHP在 PHP 中创建关联数组的数组
【发布时间】:2012-04-30 09:54:36
【问题描述】:

我想在 while 循环中创建一个关联数组。在 while 循环的每次迭代中,我想在数组中添加一个新元素。我怎么能这样做?之后,我想在 foreach 中传递这个数组并打印数据。我现在有这部分代码,但显然有问题。

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

【问题讨论】:

    标签: php arrays append arrayofarrays


    【解决方案1】:

    显然,好吧,先把它拆开,这样有一些东西要学:

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

    【讨论】:

      【解决方案2】:

      如果您尝试在每次迭代中添加到 $myarray,请这样做:

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

      或者像这样:

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

      【讨论】:

        【解决方案3】:

        要在数组末尾添加元素,请使用[]
        示例:

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

        【讨论】:

          【解决方案4】:

          显然您对$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'];
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-18
            • 1970-01-01
            • 2016-07-05
            • 2018-10-04
            • 1970-01-01
            • 2019-09-30
            • 2014-01-04
            • 1970-01-01
            相关资源
            最近更新 更多