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

