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

PHP如何从WordPress插件非标准化MySQL表中提取拼接用户姓名

解决方案

核心思路:单次遍历所有查询结果,以app_id为键聚合用户的姓和名,无需嵌套循环,2万行数据处理耗时可控制在毫秒级,完全不会产生额外服务器负载。


代码实现

优先方案(使用关联数组,可读性更高)

查询时直接获取关联数组,无需记字段索引,同时仅查询需要的字段减少数据传输开销:

// 注意mysqli构造参数顺序为 主机、用户名、密码、数据库名,原代码参数顺序有误需要修正
$mysqli = new mysqli("localhost","dbuser","dbpass","dbname");
$mysqli->set_charset("utf8mb4");
// 仅查需要的三个字段,比SELECT *性能更好
$fields = $mysqli->query("SELECT app_id, field_id, value FROM name_of_table");
$results = $fields->fetch_all(MYSQLI_ASSOC);

// 初始化用户聚合数组
$users = [];
foreach ($results as $row) {
    $appId = $row['app_id'];
    // 仅处理姓名相关的field_id,忽略其他字段数据减少运算
    if ($row['field_id'] == 9) {
        $users[$appId]['first_name'] = $row['value'];
    } elseif ($row['field_id'] == 2) {
        $users[$appId]['last_name'] = $row['value'];
    }
}

// 输出所有用户的完整姓名
foreach ($users as $appId => $userInfo) {
    // 兼容部分用户缺失姓/名的场景,避免PHP报错
    $fullName = ($userInfo['first_name'] ?? '') . ($userInfo['last_name'] ?? '');
    echo $fullName . "<br>";
    // 其他业务逻辑可在此处添加
}

兼容方案(保持原数值索引逻辑)

如果不修改原fetch_all()默认返回数值索引的逻辑,按表结构对应字段索引取值即可:

$mysqli = new mysqli("localhost","dbuser","dbpass","dbname");
$mysqli->set_charset("utf8mb4");
$fields = $mysqli->query("SELECT * FROM name_of_table");
$results = $fields->fetch_all();

$users = [];
foreach ($results as $row) {
    $appId = $row[1]; // app_id在第二列,索引为1
    $fieldId = $row[2]; // field_id在第三列,索引为2
    $value = $row[3]; // value在第四列,索引为3
    if ($fieldId == 9) {
        $users[$appId]['first_name'] = $value;
    } elseif ($fieldId == 2) {
        $users[$appId]['last_name'] = $value;
    }
}

foreach ($users as $userInfo) {
    echo ($userInfo['first_name'] ?? '') . ($userInfo['last_name'] ?? '') . "<br>";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:36:03