为了账号安全,请及时绑定邮箱和手机立即绑定

用 substr_replace 制作一个数组

用 substr_replace 制作一个数组

PHP
收到一只叮咚 2023-07-08 20:51:40
各位新人大家好,我正在承担一项繁琐的任务,即更改游戏的一堆 ID 并将它们转换为字符串。正如你在这里看到的,我对 ID 29 执行了此操作,并将其变成 Sharpshooter。有没有更有效的方法让我做到这一点?或者我是否还要写 100 个以上的 if 案例?    if ($rows[1] == 29)    {        $rows[1] = substr_replace("29","Sharpshooter",0);     }下面是我的完整代码,我还添加了一些我正在讨论的示例。<?php/* Link DB */include_once 'config.php';/* Initialize Connection */$conn=sqlsrv_connect($serverName, $conn_array);if ($conn){}else{    die; }/* Prepare Statement Preparation */$sql = "SELECT TOP 25 G.CharacterName, G.JobCode, D.PVPWin, D.PVPLose, G.PvPExp, D.PVPGiveUpFROM PvPRanking as GINNER JOIN PVPScores as DON G.CharacterID = D.CharacterIDORDER BY  RANK() OVER (ORDER BY TotalRank ASC ) ";/* Assign Parameter values. */$param1 = 1;$param2 = 2;// Array requirement for prepare statement.$procedure_params = array(    array(&$param1, SQLSRV_PARAM_OUT),    array(&$param2, SQLSRV_PARAM_OUT));/* The ACTUAL Prepare Statement */$stmt = sqlsrv_prepare( $conn, $sql, $procedure_params);/*Execute*/sqlsrv_execute($stmt);/* Variables */$autoincrement = 0;echo'<tr><th>Rank</th><th>Name</th><th>Class</th><th>Wins</th><!-- <th>Losses</th><th>Experience</th><th>Quit</th> --></tr>';// Rank # to increment itself. I.E 1,2,3,4,5,6 etc..while ($rows=sqlsrv_fetch_array($stmt)){    $autoincrement++;{    if ($rows[1] == 29)    {        $rows[1] = substr_replace("29","Sharpshooter",0);     }    if ($rows[1] == 30)    {        $rows[1] = substr_replace("30","Knight",0);     }    if ($rows[1] == 29)    {        $rows[1] = substr_replace("31","Dragon Slayer",0);     }}// Echo will spit out the rows and the data.echo '<tr id=io><td> '.$autoincrement.' </td><b> <td style = "color:#AFA;"> '.$rows[0].' </td> </b><td> '.$rows[1].' </td><td> '.$rows[2].' </td><!--  <td> '.$rows[3].' </td><td> '.$rows[4].' </td><td> '.$rows[5].' </td> -->';  } ?></table>
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

创建您自己的翻译数组。如果该值不是数组中的键,则不要替换它。


$replacements = [

    29 => 'Sharpshooter',

];


$rows[1] = $replacements[$rows[1]] ?? $rows[1];

假设您使用循环,则应在循环之前写入翻译数组。

或者,这一切都可以在带有CASE 块的sql 中执行。


最后,我建议您避免在每次调用查询时都执行此操作。 您只需将这些翻译添加为 PvPRanking 中的新列(或最合适的位置),并将它们添加到结果集中。换句话说,无论什么表都有JobCode列为唯一值的值——该表都应该接收新列。

如果您没有包含这些唯一职位代码的表,那么您应该创建一个表并将该表连接到现有查询。这是最专业且可维护的解决方案,因为当您需要更新列表时,您只需要更新表而不是项目中潜在的多个文件。


查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信