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

如何合并从数据库获取的多维数组为一维数组?

问题

从数据库获取用户权限码时返回了多维数组,需要将其合并为一维数组并按顺序排列,且无法修改存储过程的查询语句。

原代码

function loadGlobalPermissions(){
    global $pdo;
    $user_id = $_SESSION['id'];
    $sql="CALL skaj_listp(:user_id)";
    $statement = $pdo->prepare($sql);
    $statement->bindParam(':user_id',$user_id,PDO::PARAM_STR);
     if($statement->execute()){
          $response[] = $statement->fetchALL(PDO::FETCH_ASSOC);
        }
        return $response;
}

返回的多维数组

array(1) { 
    [0]=> array(1) { 
        [0]=> array(28) { 
            [0]=> array(1) { ["kod"]=> string(2) "DR" } 
            [1]=> array(1) { ["kod"]=> string(3) "DRW" } 
            [2]=> array(1) { ["kod"]=> string(2) "ER" } 
            [3]=> array(1) { ["kod"]=> string(4) "ERDD" } 
            [4]=> array(1) { ["kod"]=> string(5) "ERDSP" } 
            [5]=> array(1) { ["kod"]=> string(4) "ERED" } 
            [6]=> array(1) { ["kod"]=> string(5) "EREFP" } 
            [7]=> array(1) { ["kod"]=> string(4) "EREM" } 
            [8]=> array(1) { ["kod"]=> string(5) "EREMA" } 
            [9]=> array(1) { ["kod"]=> string(4) "EREO" } 
            [10]=> array(1) { ["kod"]=> string(4) "EREP" } 
            [11]=> array(1) { ["kod"]=> string(4) "ERES" } 
            [12]=> array(1) { ["kod"]=> string(4) "ERET" } 
            [13]=> array(1) { ["kod"]=> string(4) "EREU" } 
            [14]=> array(1) { ["kod"]=> string(5) "EREWM" } 
            [15]=> array(1) { ["kod"]=> string(4) "ERUD" } 
            [16]=> array(1) { ["kod"]=> string(5) "ERUSP" } 
            [17]=> array(1) { ["kod"]=> string(2) "EU" } 
            [18]=> array(1) { ["kod"]=> string(3) "EUS" } 
            [19]=> array(1) { ["kod"]=> string(6) "EUSEUP" } 
            [20]=> array(1) { ["kod"]=> string(3) "EWR" } 
            [21]=> array(1) { ["kod"]=> string(3) "LRW" } 
            [22]=> array(1) { ["kod"]=> string(5) "LUDDG" } 
            [23]=> array(1) { ["kod"]=> string(5) "LUUZG" } 
            [24]=> array(1) { ["kod"]=> string(3) "LUW" } 
            [25]=> array(1) { ["kod"]=> string(2) "UR" } 
            [26]=> array(1) { ["kod"]=> string(2) "UW" } 
            [27]=> array(1) { ["kod"]=> string(3) "WPA" } 
        } 
    } 
}

解决方案

方式一:修改原函数直接返回排序后的一维数组

调整函数逻辑,拆解多维数组提取kod值,再进行排序:

function loadGlobalPermissions(){
    global $pdo;
    $user_id = $_SESSION['id'];
    $sql="CALL skaj_listp(:user_id)";
    $statement = $pdo->prepare($sql);
    $statement->bindParam(':user_id',$user_id,PDO::PARAM_STR);
    
    $permissionCodes = [];
    if($statement->execute()){
        // 获取存储过程返回的结果集
        $result = $statement->fetchAll(PDO::FETCH_ASSOC);
        // 拆解嵌套数组,提取所有权限码
        if (!empty($result[0][0])) {
            foreach ($result[0][0] as $item) {
                if (isset($item['kod'])) {
                    $permissionCodes[] = $item['kod'];
                }
            }
        }
        // 按字符串顺序排序权限码
        sort($permissionCodes);
    }
    return $permissionCodes;
}

方式二:调用原函数后再处理结果

如果不想修改原函数,可在调用后对返回的多维数组进行扁平化和排序:

// 调用原函数获取原始多维数组
$rawPermissions = loadGlobalPermissions();
$permissionCodes = [];

// 拆解嵌套数组提取权限码
if (!empty($rawPermissions[0][0][0])) {
    foreach ($rawPermissions[0][0][0] as $item) {
        if (isset($item['kod'])) {
            $permissionCodes[] = $item['kod'];
        }
    }
}

// 按字符串顺序排序
sort($permissionCodes);

// 此时$permissionCodes即为排序后的一维权限码数组

说明

  • 原数组是三层嵌套结构,需要逐层访问到包含kod的最内层元素;
  • 使用sort()函数可实现权限码的自然字符串排序,若需要不区分大小写排序可改用natcasesort();
  • 代码中加入了非空判断,避免因结果集为空导致的报错。

内容的提问来源于stack exchange,提问作者zirson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:25:25