数字和关联数组用法

时间:2013-02-20 14:52:55

标签: php mysqli

$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行的Name和CountryCode:

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

或者最好只使用数字数组并通过$ row [4] [0],$ row [4] [1]访问它; 任何帮助都会很棒。我(显然)是一个相对初学者。谢谢!

3 个答案:

答案 0 :(得分:0)

不,它不是一个多维数组。为了对所有结果做一些事情,你应该循环结果,如:

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

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

答案 1 :(得分:0)

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

  • 数字索引:0,1,2直到结果中的列数。
  • 字符串索引:“名称”,“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;
}

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

答案 2 :(得分: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值。没有   会发生错误。