【问题标题】:Numeric and associative array usage数值和关联数组的使用
【发布时间】:2013-02-05 15:03:52
【问题描述】:
$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]; 访问它更好吗? 任何帮助都会很棒。我(显然)是这方面的相对初学者。谢谢!

【问题讨论】:

  • mysqli_fetch_array 将从数据库结果中返回一行。如果您想查看$row 数组的内容,您可以在mysqli_fetch_array 之后执行echo "<PRE>"; print_r($row); - 它可能会帮助您理解数据结构。
  • 您还应该查看接受的答案 - stackoverflow.com/questions/3415296/…

标签: php mysqli


【解决方案1】:

mysqli_fetch_arrayMYSQLI_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;
}

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

【讨论】:

  • 这正是我正在寻找的那种答案(有点怀疑它是非多维的!)——所以在“用行做点什么”中,你能建议一种简单的打包方法吗?将数据放入多维数组?
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    不可能,因为$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 值。不 会发生错误。

    【讨论】:

      猜你喜欢
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      相关资源
      最近更新 更多