PHP中的变量自己增加了吗?

时间:2016-05-12 21:38:40

标签: php arrays multidimensional-array

一个奇怪的问题。 我试图使用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根本没有打印! (依此类推......)

知道为什么会这样吗?感谢。

1 个答案:

答案 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++;
    }

希望它有所帮助...