我正在开发一个小项目,我发现使用以下代码循环遍历列值实际上是打印两次。 例如:
admin
admin
user
user
...
等等。这是代码:
$sql = "SELECT username FROM users";
$result = mysqli_query($db, $sql);
while($row = mysqli_fetch_array($result))
{
foreach($row as $elem)
{
echo $elem . "<br/>";
}
}
while循环是否会影响foreach并使其执行两次?也许是一个错字?
答案 0 :(得分:0)
这是因为mysqli_fetch_array()
两次获取行 - 一次将列作为索引,一次使用带编号的索引。
您可以改为使用mysqli_fetch_assoc()
,或者使用mysqli_fetch_array($result, MYSQLI_ASSOC)
,而var_dump()
仅使用列作为键来获取它,而不是两者。
示例,使用$row
时mysqli_fetch_array()
变量上的array(2) {
[0]=>
string(5) "admin"
["username "]=>
string(5) "admin"
}
array(2) {
[0]=>
string(4) "user"
["username "]=>
string(4) "user"
}
可以提供
mysqli_fetch_array($result, MYSQLI_ASSOC)
正如您所知,它使用不同的键索引两次获取值。按照上面的建议(mysqli_fetch_assoc($result)
或array(1) {
["username "]=>
string(5) "admin"
}
array(1) {
["username "]=>
string(4) "user"
}
)执行操作只会获取以下内容
{{1}}
参考
答案 1 :(得分:0)
希望这适合你
$sql = "SELECT username FROM users";
$result = mysqli_query($db, $sql);
while($row = mysqli_fetch_array($result))
{
$name = $row['username']; // taking saving row in variable name
echo $name . "<br/>";
}
答案 2 :(得分:0)
如果要循环遍历每个元素,则需要将行放在数组中。
while($row = mysqli_fetch_array($result)){
$rows[] = $row;
}
foreach($rows as $elem){
echo $elem . "<br/>";
}
您现在正在做的是循环每一行,然后循环每一行的每个元素。所以,是的,这将打印两次。