我最近一直在做一个项目。
它从游戏服务器检索JSON,将其解码为数组,然后将数组值保存到SQLite DB中(供稍后显示/操作)。我是一个编程新手,在此之前从未接触过PHP。
我的问题是:有没有更好、更有效的方法来处理这个问题?基本上,这段代码循环遍历大型多维数组,并替换等于字符串的值。它在将字段插入数据库之前执行此操作,以便我可以将字段格式化为更具可读性。
问题是,在实际的脚本中,我现在有一个巨大的定义变量列表,像3个foreach
循环,结合15个左右的if
/else if
/else
语句。
$sr = "Summoners Rift";
$rs = "Ranked Solo";
$rt = "Ranked Team";
$nr = "Normal";
foreach ($history['games'] as &$typeMode)
{
if ($typeMode['subType'] == 'RANKED_SOLO_5x5')
{
$typeMode['gameMode'] = $sr;
$typeMode['subType'] = $rs;
}
elseif ($typeMode['subType'] == 'RANKED_TEAM_5x5')
{
$typeMode['gameMode'] = $sr;
$typeMode['subType'] = $rt;
}
elseif ($typeMode['subType'] == 'NORMAL')
{
$typeMode['gameMode'] = $sr;
$typeMode['subType'] = $nr;
}
}
问题是,在实际的脚本中,我有一个巨大的列表定义变量,像3个foreach循环,总共有15个左右的IF/ELSEIF/ELSE语句
根据你所展示的数据,我可以推荐的最佳解决方案是创建一个与你所拥有的数据相连的基本结构数组,然后使用foreach
循环根据初始数组结构赋值:
// Set structured array values.
$array_values = array();
$array_values['RANKED_SOLO_5x5']['gameMode'] = "Summoners Rift";
$array_values['RANKED_SOLO_5x5']['subType'] = "Ranked Solo";
$array_values['RANKED_TEAM_5x5']['gameMode'] = "Summoners Rift";
$array_values['RANKED_TEAM_5x5']['subType'] = "Ranked Team";
$array_values['NORMAL']['gameMode'] = "Summoners Rift";
$array_values['NORMAL']['subType'] = "Normal";
// Set structured array values based on the sub type.
foreach ($history['games'] as &$typeMode) {
$typeMode['gameMode'] = $array_values[$typeMode['subType']]['gameMode'];
$typeMode['subType'] = $array_values[$typeMode['subType']]['subType'];
}
这样$array_values
总是有预设值的地方开始。赋值是通过在foreach
循环中访问$typeMode['subType']
的数组键来实现的。
对于这样的事情,我更喜欢使用switch
控制结构而不是if
/elseif
/else
,尽管您的方法非常好,如果有点冗长可能:
foreach ($history['games'] as &$typeMode)
{
$typeMode['gameMode'] = $sr;
switch($typeMode['subType'])
{
case 'RANKED_SOLO_5x5':
$typeMode['subType'] = $rs;
break;
case 'RANKED_TEAM_5x5':
$typeMode['subType'] = $rt;
break;
case 'NORMAL':
$typeMode['subType'] = $nr;
break;
}
}
如果$typeMode['gameMode']
总是等于$sr;
,那么你只需要那一行。