我有一个查询,它从数据库中获取有关图库类别的信息,并将其加载到一个数组中,以便在整个脚本的几个位置使用。
$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
值更新密钥,但这似乎弄巧成拙。
这是我的一厢情愿吗?或者是否有一些不起眼的技巧可以实现这一目标?
答案 0 :(得分:1)
我将在这里做一些假设,第一个也是最重要的是你使用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()使用第一个数组作为数组键值将第一个数组与第二个数组合并。