PHP数组,从覆盖范围获取多维数据

时间:2016-03-09 20:56:39

标签: php arrays multidimensional-array

我已经在stackoverflow上查找了答案,但没有人正确解释。

我有一个有效的循环:

info = array();
while($get_info= mysql_fetch_array($info_result)){
    $info['team_id'] = $get_info['team_id'];
    $info['team_points'] = $get_info['team_points'];
}

当我打印出阵列时:

  

数组([team_id] => 26 [team_points] => 100)

但是我的foreach返回了一个无效的论点。

foreach ($info as $info_mation ){
    echo $info_mation['team_id'];
    echo $info_mation['team_points'];
    echo "<br/>";
}

我尝试了很多不同的方法但没有任何作用。

谢谢!

3 个答案:

答案 0 :(得分:2)

问题在于从数据库中获取数据。像这样修改你的while循环:

info = array();
while($get_info = mysql_fetch_array($info_result)){
    $temp_info = array();
    $temp_info['team_id'] = $get_info['team_id'];
    $temp_info['team_points'] = $get_info['team_points'];

    $info[] = $temp_info;
}

现在您的foreach循环应该正常运行。

答案 1 :(得分:0)

如果您到目前为止看到的内容没有意义,可以再解释一下。当你这样做时:

$info = array();
while($get_info = mysql_fetch_array($info_result)) {
    $info['team_id'] = $get_info['team_id'];
    $info['team_points'] = $get_info['team_points'];
}

您在while循环的每次迭代中覆盖$info。因此,在循环结束时,$info将只包含查询结果的最后一行。 这解释了您看到的结果:

  

数组([team_id] =&gt; 26 [team_points] =&gt; 100)

所以当你用

迭代这个数组时
foreach ($info as $info_mation ){
    echo $info_mation['team_id'];
    echo $info_mation['team_points'];
    echo "<br/>";
}

$info_mation将包含26,然后是100,这对foreach确实无效。

您需要创建一个多维数组而不是一维数组。你可以通过稍微修改while循环来实现这一点:

while($get_info= mysql_fetch_array($info_result)) {
    $info[] = $get_info;
}

这样做会在每次迭代时向$info数组添加一个新的数组元素,而不是重复覆盖相同的两个元素。

答案 2 :(得分:0)

这是你的代码:

info = array();
while($get_info= mysql_fetch_array($info_result)){
   $info['team_id'] = $get_info['team_id'];
   $info['team_points'] = $get_info['team_points'];
}

将其更改为:

$info = array();
while($get_info= mysql_fetch_array($info_result)){
   $info[] = array(
       'team_id' => $get_info['team_id'],
       'team_points' => $get_info['team_points']
   );
}

所以,你的$ info变量包含你所做的sql结果中的所有数组。

foreach($info as $inf) {
   echo $inf['team_id'];   
   echo $inf['team_points'];
   echo '<br>';
}

我们已经完成了! :)