我有一个查询,该查询从数据库获取有关画廊类别的信息,并将其加载到数组中,以便在整个脚本中的多个位置使用。

$q_gals = "SELECT `gal_id`, `gal_name` FROM `cms_galleries` ORDER BY `gal_sort` ASC, `gal_id` DESC";
$r_gals = $dbc->query($q_gals);
if (($r_gals) && ($r_gals->num_rows > 0)) {
    $galleries = $r_gals->fetch_all(MYSQLI_ASSOC);
}


我希望将$galleries数组的键设置为查询中的gal_id值。我知道我可以简单地通过使用while循环遍历结果并根据需要手动构建数组来做到这一点:

$galleries = array();
while($row_gal = $r_gal->fetch_assoc()) {
  $galleries[$row_gal['gal_id']] = $row_gal['gal_name'];
}


老实说,fetch_all给我的主要是整洁的代码,这使我想要执行此操作。这不是一个庞大的脚本,两者之间的性能差异无关紧要。我可以,我想遍历现有数组并用gal_id值更新键,但这似乎是自欺欺人的。

这是我的一厢情愿吗?还是有一些晦涩的技巧可以做到这一点?

最佳答案

我将在这里做出一些假设,第一个也是最重要的是您正在使用PHP 5.5或更高版本,第二个是您只是在寻找避免for循环而不实际执行一些SQL魔术的工作...

为了仅用一行代码即可实现这一点,您需要使用几个容易错过的PHP数组函数; array_column()array_combine()

这样,代替for循环的代码将如下所示:

$galleries = array_combine(array_column($galleries, 'gal_id'), $galleries);


array_columns()调用从定义的列创建一个数组,因此最终得到一个仅包含'gal_id'值的数组。然后,array_combine()使用第一个数组作为数组键值,将第一个数组与第二个数组合并。

关于php - 使用列使用mysqli_fetch_all定义键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36007231/

10-14 13:47
查看更多