在循环 mysql 查询结果集时填充包含两个元素行的数组

问题描述 投票:0回答:2

我有一个二维数组,我想用像这样的 while 循环将值推送到它;

$arr[0][1] = 1. value
$arr[0][2] = 2. value

我已经尝试过了

while ($zRow = mysql_fetch_array($zQuery))
{
    $props[]['name'] = $zRow['name'];
    $props[]['photo'] = $zRow['thumbnail'];
}

此循环将名称推送到 $props[0][name] 并将缩略图推送到 $props[1][photo]

我也尝试过

$j = 0;
while($zRow = mysql_fetch_array($zQuery))
{
    $props[$j]['name'] =$zRow['name'];
    $props[$j]['photo'] =$zRow['thumbnail'];
    $j += 1;
}

这是可行的,但是当我稍后使用 foreach 循环时,它会带来像“非法偏移类型”这样的麻烦。

这是我的 foreach 循环:

foreach ($props as $no)
{
    echo $props[$no]['name'];
} 

现在我的问题:

  1. 除了使用
    $j
    变量(如二维数组的
    array_push()
    )的 while 循环之外,还有其他方法吗?
  2. 如何对二维数组使用 foreach 循环?
php arrays foreach push
2个回答
18
投票

您可以将第一个循环更改为以下内容:

while($zRow = mysql_fetch_array($zQuery))
{
    $row = array();
    $row['name'] = $zRow['name'];
    $row['photo'] = $zRow['thumbnail'];
    $props[] = $row;
}

你的方法也有效,但你需要额外的变量。

在第二个循环中,您实际需要做的是:

foreach($props as $index => $array)
{
    echo $props[$index]['name'];
    // OR
    echo $array['name'];
}

4
投票

使用

$myArray[] = 'foo'
将任何内容推入数组都会增加数组的计数器。

对于多维数组,您需要填充“内部”数组,然后将其推送到“外部”(在您的情况下为

$props
)数组。

while($zRow = mysql_fetch_array($zQuery)) {
    $data = array('name' => $zRow['name'], 'photo' => $zRow['thumbnail']);
    $props[] = $data;
}

迭代深度已知的多维数组:

foreach ($props as $prop) {
    foreach ($prop as $key => $value) {
        echo "{$key} => {$value}" . PHP_EOL;
    }
}

如果嵌套深度未知,您可能必须使用递归函数来收集数据。

© www.soinside.com 2019 - 2024. All rights reserved.