在结果数组中是否使用列(PK)作为索引的"mysqli_fetch_all"?

Red*_*iCo 5 php arrays mysqli

目前我有一些效果:

<?php

  // ...More Code

  $result = mysqli_query($mysqli, "SELECT * FROM stock_types");
  if(!$result || mysqli_num_rows($result) < 1) die('error');
  $stock_types = mysqli_fetch_all($result, MYSQLI_ASSOC);
  mysqli_free_result($result);
  die(print_r($stock_types,true));

  // More Code...

?>
Run Code Online (Sandbox Code Playgroud)

会输出一些效果:

Array (
  [0] => Array (
    [type_id] => 1
    [type_name] => In Stock
    [type_visible] => 1
    [type_locked] => 0
  )
  [1] => Array (
    [type_id] => 2
    [type_name] => Out of Stock
    [type_visible] => 1
    [type_locked] => 1
  )
  [2] => Array (
    [type_id] => 3
    [type_name] => Offline
    [type_visible] => 0
    [type_locked] => 1
  )
  [3] => Array (
    [type_id] => 5
    [type_name] => Hidden
    [type_visible] => 0
    [type_locked] => 0
  )
)
Run Code Online (Sandbox Code Playgroud)

是否存在mysqli提取过滤器(正确的术语?),如果存在数组索引值,它将使用结果集中的主键?如果我的问题不明确,那么会产生一些影响他的效果:

Array (
  [1] => Array (
    [type_name] => In Stock
    [type_visible] => 1
    [type_locked] => 0
  )
  [2] => Array (
    [type_name] => Out of Stock
    [type_visible] => 1
    [type_locked] => 1
  )
  [3] => Array (
    [type_name] => Offline
    [type_visible] => 0
    [type_locked] => 1
  )
  [5] => Array (
    [type_name] => Hidden
    [type_visible] => 0
    [type_locked] => 0
  )
)
Run Code Online (Sandbox Code Playgroud)

type_id删除值并不重要,但如果主键可用于索引数组,那么它将非常有用.我可以用一个fetch循环来做这个,但我想知道是否有更简单更优雅的方法来处理它.

Bil*_*win 5

在 ext/mysqli 中没有方便的功能。但是您可以通过逐行获取行并将它们放入正确的数组键中,以您想要的方式构建数组:

此示例假设主键是第一列:

$set = array();
while ($row = $result->fetch_assoc()) {
    $set[array_shift($row)] = $row;
}
Run Code Online (Sandbox Code Playgroud)

要使用 fetch_all() 执行此操作,您可以处理获取的 while 数据集:

$set = array();
$data = $result->fetch_all(); 
while ($row = array_shift($data)) {
    $set[array_shift($row)] = $row;
}
Run Code Online (Sandbox Code Playgroud)