PHP通过MySQLi查询生成一维数组而非对象数组的实现问题
解决MySQLi查询结果转一维数组的最优方案
嘿,我懂你的需求——你现在需要把查询返回的多列图标数据,平铺成一个纯值的一维数组,而不是保留原来的行结构。先直接说结论:你用json_decode(json_encode($iconsArray), true)的方法不仅解决不了问题,还绕了弯路,绝对不是最优方案。
问题出在哪?
你原来的代码是把每一行(包含icon_1到icon_4的关联数组)直接塞进$iconsArray,所以最终得到的是一个二维数组,转成JSON后自然就是对象数组。而json_decode(json_encode(...), true)只是把对象格式转成关联数组格式,根本没法帮你把多列的数值拆出来拼成一维。
最优解法:直接在循环中提取字段值
我们可以直接在遍历查询结果的过程中,把每一行里的每个图标值单独提取出来,追加到一维数组里。这样既高效又逻辑清晰,完全不需要多余的JSON转码操作。
修改后的代码如下:
function listIcons(){ global $link; $queryAssets = "SELECT DISTINCT icon_1,icon_2,icon_3,icon_4 FROM icons"; $resultqueryAssets = mysqli_query($link, $queryAssets) or die(mysqli_error($link)); $allIcons = []; // 初始化一维数组 while ($row = mysqli_fetch_assoc($resultqueryAssets)) { // 遍历当前行的所有字段值,逐个追加到一维数组 foreach($row as $icon) { $allIcons[] = $icon; } } $jsonOutput = json_encode($allIcons); echo $jsonOutput; return $allIcons; // 返回一维数组,而非包装后的数组 }
可选的更直接写法(如果字段固定)
如果你确定查询的字段永远是icon_1到icon_4,也可以不用foreach,直接手动提取每个字段的值,性能会略高一点:
while ($row = mysqli_fetch_assoc($resultqueryAssets)) { $allIcons[] = $row['icon_1']; $allIcons[] = $row['icon_2']; $allIcons[] = $row['icon_3']; $allIcons[] = $row['icon_4']; }
效果验证
修改后,$allIcons的结构就会完全符合你的期望:
["01_a", "01_b", "01_c", "01_d", "02_a", "02_b", "02_c", "02_d", ...]
内容的提问来源于stack exchange,提问作者Tyra Pululi
相关产品推荐
相关产品推荐

