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
相关产品推荐
相关产品推荐

