You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:28:16