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

PHP+MySQL+Twig实现随机全名生成时姓氏无法正确显示问题求助

问题根因

你当前的代码逻辑将随机名(firstname)和随机姓(lastname)存储在两个完全独立的数组中,传递给模板的fullnames数组仅包含firstname字段,模板尝试读取fullname['lastname']时自然没有对应值,因此无法显示。
另外你的模型代码中存在SQL语法小问题:getRandomName、getRandomLastName方法的查询语句中,表名前缀和表名之间多了空格,会导致SQL执行报错,需要先修正。

修改方案

1. 修正模型SQL语法错误

找到模型中两个单条查询方法的SQL行,删除表名前多余的空格:

// 原来的错误写法
$query = $this->db->query("SELECT DISTINCT *, fake_firstname FROM " . DB_PREFIX . " fakereviews_name WHERE fake_name_id = '" . (int)$fake_name_id . "'");
// 修改后
$query = $this->db->query("SELECT DISTINCT *, fake_firstname FROM " . DB_PREFIX . "fakereviews_name WHERE fake_name_id = '" . (int)$fake_name_id . "'");
// 原来的错误写法
$query = $this->db->query("SELECT DISTINCT *, fake_lastname FROM " . DB_PREFIX . " fakereviews_lastname WHERE fake_name_id = '" . (int)$fake_name_id . "'");
// 修改后
$query = $this->db->query("SELECT DISTINCT *, fake_lastname FROM " . DB_PREFIX . "fakereviews_lastname WHERE fake_name_id = '" . (int)$fake_name_id . "'");

2. 重写控制器逻辑,合并名和姓为全名数组

根据你的需求二选一即可:

方案A:同fake_name_id匹配生成全名(两张表同ID的名+姓为一组)

直接替换原来的控制器所有相关代码:

// 获取随机20个姓,以fake_name_id为键存储方便匹配
$lastnames = $this->getRandomLastNames();
// 获取随机20个名
$firstnames = $this->getRandomNames();

$data['fullnames'] = [];
foreach ($firstnames as $name_id => $first_item) {
    // 仅保留有对应姓的记录,避免空值
    if (isset($lastnames[$name_id])) {
        $data['fullnames'][] = [
            'firstname' => $first_item['firstname'],
            'lastname'  => $lastnames[$name_id]['lastname']
        ];
    }
}

方案B:完全随机混搭名和姓(任意名+任意姓组合,随机性更强)

直接替换原来的控制器所有相关代码:

// 把查询到的名、姓转成索引数组方便随机抽取
$lastname_list = array_values($this->getRandomLastNames());
$firstname_list = array_values($this->getRandomNames());
$generate_count = 20; // 可自定义要生成的全名数量,不要超过两个查询返回的最小条数

$data['fullnames'] = [];
for ($i = 0; $i < $generate_count; $i++) {
    // 随机抽取一个名、一个姓组合
    $random_first = $firstname_list[array_rand($firstname_list)];
    $random_last = $lastname_list[array_rand($lastname_list)];
    $data['fullnames'][] = [
        'firstname' => $random_first['firstname'],
        'lastname'  => $random_last['lastname']
    ];
}

3. 模板无需修改

你现有的Twig模板代码可以直接使用,修改后即可正常输出完整的随机全名。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:00:03