0

让我首先说我对 php 相当陌生。我正在尝试创建一个多维数组,但是当我查看结果时遇到了一个奇怪的结果。我感觉我使用的语法不正确,但无法在线验证。所以我在这里提出这个问题。

这是我正在尝试做的事情的要点:

// Given: $row["foo"] == "Hello" && $row["bar"] == 1

while($row = mysqli_fetch_array($query_result, MYSQLI_ASSOC)){
    $multiArray[$i] = $row["foo"];
    $multiArray[$i]["lorem"] = $row["bar"];
    $i++;   
}

当我去打印时,$multiArray[$i]我得到:1ello

正如我所说,我相信错误在于我如何分配这个多维数组的语法。有人可以帮我找到与上面的 php madness 类似的方法(我只能猜测)吗?

先感谢您!

4

3 回答 3

2

您不能将数据类型组合在同一个数组值中。

$multiArray[$i]只能有一个值类型(字符串、整数或数组),但在您的代码中,您需要同时拥有一个数组和一个字符串!

一个可能的解决方案是(但取决于你的逻辑):

while($row = mysqli_fetch_array($query_result, MYSQLI_ASSOC)){
    $multiArray[$i]["lorem_string"] = $row["foo"];
    $multiArray[$i]["lorem"] = $row["bar"];
    $i++;   
}
于 2012-10-23T19:31:39.677 回答
0

您实际上是首先为 $multiArray[$i] 分配一个字符串“hello”,然后尝试在下一行为其分配一个数组。

相反,您需要将第一个分配给一个数组,然后该数组可以包含字符串或整数或更多数组或其他任何东西

此外,在这种情况下明确地做事也将帮助您了解正在发生的事情。

例如:

$i = 0; // explicit initialization of $i
while($row = mysqli_fetch_array($query_result, MYSQLI_ASSOC)){
    $multiArray[$i] = array(); // explicit initialization of array
    $multiArray[$i]["foo"] = $row["foo"];
    $multiArray[$i]["lorem"] = $row["bar"];
    $i++;   
}

然后,如果您想要 "hello"echo $multiArray[$i]["foo"];并且想要 1 echo $multiArray[$i]["lorem"];

于 2012-10-23T19:38:01.930 回答
0

因为首先您分配$multiArray[$i] = $row["foo"];so$multiArray[$i]将是一个带有示例值Hello的字符串,然后您将字符串的lorem索引分配给$multiArray[$i]["lorem"] = $row["bar"];. lorem评估为0,所以输出将 ve1ello

编辑:新版本的 PHP 也应该产生警告。

于 2012-10-23T19:32:06.980 回答