一个奇怪的问题。
我试图使用medoo和sqlite文件来获取一些数据。我收到了一个多维数组。我已经使用print_r
检查了数据是否真的在其中。
这是print_r
输出(简短版本):
Array (
[0] => Array ( [id] => 1 [name] => aaa )
[1] => Array ( [id] => 2 [name] => bbb )
[2] => Array ( [id] => 3 [name] => ccc )
[3] => Array ( [id] => 4 [name] => ddd )
[4] => Array ( [id] => 5 [name] => eee ) ...
)
这是我的代码:
$datas = $database->select("suppliers","*");
print_r ($datas);
$length=count($datas);
$i = 0;
while ( $i < $length ) {
echo $i;
echo '<a href="edit_sup.php?sup='.$datas[$i]["id"].">".$datas[$i]["name"]."</a><br/>";
echo $i;
$i++;
}
问题是并非所有数据都被打印出来!
在尝试打印var $i
时,我发现在a href
之前和之后价值不同!例如,输出类似于:
0 bbb
21 ddd
43 fff
正如您所看到的,在第一行aaa
应该打印 - 而是打印bbb
,而aaa
根本没有打印! (依此类推......)
知道为什么会这样吗?感谢。
答案 0 :(得分:5)
您可能想要尝试其他类型的循环构造:
<?php
$datas = $database->select("suppliers","*");
print_r ($datas);
foreach ($datas as $data) {
echo '<a href="edit_sup.php?sup='. $data["id"] .'">' . $data["name"] . "</a><br/>";
}
虽然使用while循环没有什么本质上的错误,但你似乎混淆了单引号和双引号,所以即使While循环仍然可以正常工作:
while ( $i < $length ) {
echo $i;
// THE ISSUE WAS JUST WITH THE SWAPPING OF SINGLE QUOTES WITH DOUBLE QUOTES...
echo '<a href="edit_sup.php?sup=' . $datas[$i]["id"] . '">' . $datas[$i]["name"] . "</a><br/>";
echo $i;
$i++;
}
希望它有所帮助...