0
$query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3";
$result = mysqli_query($link, $query);

/* associative and numeric array */
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
printf ("%s (%s)\n", $row[0], $row["CountryCode"]);

从 PHP 手册中我得到了上面的代码,我想知道是否有人可以帮助我更好地理解它。这已经是多维的了吗?我可以通过以下方式访问(例如)第 5 行的名称和国家代码:

printf ("%s (%s)\n", $row[4][0], $row[4]["CountryCode"];

还是只使用数字数组并通过 $row[4][0], $row[4][1]; 访问它更好吗?任何帮助都会很棒。我(显然)是这方面的相对初学者。谢谢!

4

3 回答 3

0

这是不可能的,因为 $row 是一维数组

/* associative and numeric array */
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
printf ("%s (%s)\n", $row[0], $row["CountryCode"]);

你可以尝试以下

printf ("%s (%s)\n", $result[0]["CountryCode"]);

您只从 mysql 请求了 3 行,您可以使用空/空值打印第 4 行或更高行。这是一个未定义/数组限制超出错误

正如您使用“MYSQLI_BOTH”一样。因此它将显示 NULL 值。不会发生错误。

于 2013-02-20T15:08:17.070 回答
0

mysqli_fetch_arraywith参数的结果MYSQLI_BOTH是一维数组。结果表示结果集中的单行。每行都是一个数组,其中包含以两种方式索引的检索数据:

  • 数字索引:0、1、2 到结果中的列数。
  • 字符串索引:“Name”、“CountryCode”以及您在那里拥有的其他字段

数组如下所示:

$row Array (
    [0] => "MyName"
    [1] => "MyCountryCode"
    ["Name"] => "MyName"
    ["CountryCode"] => "MyCountryCode"
)

在同一个数组中同时看到数字和字符串索引令人困惑,但数据实际上是正确的。除非你真的需要数字索引,否则字符串索引使用起来会舒服得多。因此,该功能mysqli_fetch_assoc将更适合这种情况。

尽管如此,这些方法只返回结果集中的一行。要获取所有行,您可以使用以下方法:

while( $row = mysqli_fetch_assoc( $result ) ) {
    // do something with the row
}

编辑:将数据添加到多维数组:

$allResults = array();
while( $row = mysqli_fetch_assoc( $result ) ) {
    $allResults[] = $row;
}

请注意,在大多数情况下,您可以按顺序处理每一行,而无需将其存储以备后用。

于 2013-02-20T15:05:28.673 回答
0

不,它不是多维数组。为了对所有结果执行某些操作,您应该循环遍历结果,例如:

while($row = mysqli_fetch_array($result))
{
    echo $row["CountryCode"];
}

我总是更喜欢使用名称而不是数字,因为它们直接访问 Queries 列名称,因此更容易查看正在提取的值。在这个例子中,我知道CountryCode当我阅读代码时会打印出来,而不是一些随机索引。

于 2013-02-20T15:03:16.453 回答