1

为模糊的提问道歉,我是相当新的。我一直在寻找,但似乎找不到适合我的方案的解决方案。

我正在尝试将循环的 mysql 查询的输出存储为要在循环外使用的变量,就像我要在循环内打印结果一样。我试图节省开销,因为我继承了一个经常使用这个大型数据集的函数,并试图通过保存输出而不是每次查询数据库来减少对数据库的调用。

目前我有 -

$data = array();
$sql = mysqli_query($con, SELECT * FROM my_table);
while($row = mysqli_fetch_assoc($sql)){
  $data[] = $row;
}
print_r($data);

这导致:

Array ( 
[0] => Array ( [id] => 1 [name] => john [age] => 44  ) 
[1] => Array ( [id] => 2 [name] => paul [age] => 30  )
[2] => Array ( [id] => 3 [name] => george [age] => 25  )
)

但我需要这样的输出,即没有顶级索引......

$output =

Array ( [id] => 1 [name] => john [age] => 44  ) 
Array ( [id] => 2 [name] => paul [age] => 30  )
Array ( [id] => 3 [name] => george [age] => 25  ) ;

已经很晚了,我的大脑躲开了我,非常感谢您的任何指点。

编辑:将对此进行调度,结果证明我的问题是格式化问题,在将其分配为变量同时将输出保存到文件时,我没有转义 ($) 符号。谢谢大家的回复,让我直截了当

4

2 回答 2

0

结果和预期结果基本相同,因为正如@Nick 指出的那样,您需要拥有顶级键(0,1,2)。(否则,您将如何确定哪个 id 属于 john、paul 和 george?)

根本不可能存储这样的数组:

Array ( [id] => 1 [name] => john [age] => 44  ) 
Array ( [id] => 2 [name] => paul [age] => 30  )
Array ( [id] => 3 [name] => george [age] => 25  )

它必须像这样存储:(使用顶级键(在本例中:0,1 和 2))

Array ( 
    [0] => Array ( [id] => 1 [name] => john [age] => 44  ) 
    [1] => Array ( [id] => 2 [name] => paul [age] => 30  )
    [2] => Array ( [id] => 3 [name] => george [age] => 25  )
)

的值$data[0]['name']是 john,的值$data[1]['name']是 paul 等。

如果你引用$data[0]它包含数组:Array ( [id] => 1 [name] => john [age] => 44 )

如果你引用$data[1]它包含数组:Array ( [id] => 2 [name] => paul [age] => 30 )

无法根据需要存储值,但当然可以根据需要获得输出:

//$data_value is an array in every row 
foreach($data as $data_value) {
    print_r($data_value);
}

这将产生输出:

Array
(
    [id] => 1
    [name] => john
    [age] => 44
)
Array
(
    [id] => 2
    [name] => paul
    [age] => 30
)
Array
(
    [id] => 3
    [name] => george
    [age] => 25
)
于 2020-04-15T05:37:13.930 回答
-2

做这个:

$data = [];
$i = 0;
while ($row = mysqli_fetch_assoc($sql)) {
    foreach( $row as $field => $value) {
        $data[$i][$field] = $value:
    }
    $i++;
}

print_r($data)
于 2020-04-15T04:47:39.957 回答