PHP多维数组值替换

时间:2014-06-27 20:34:11

标签: php arrays multidimensional-array foreach

我最近一直致力于一个项目,以获得乐趣。

它从游戏服务器检索JSON,将其解码为数组,然后将数组值保存到SQLite DB中(稍后用于显示/操作)。我是一般的编程新手,在此之前从未接触过PHP。

我的问题:有没有更好,更有效的方法来解决这个问题?

基本上,这段代码循环遍历大型多维数组,并替换等于字符串的值。它在插入数据库之前执行此操作,以便我可以将字段格式化为更易读。

问题在于,在实际的脚本中,我现在有一个庞大的已定义变量列表,就像3个foreach循环一样,大约有15个if / else if / {{ 1}}陈述。

else

2 个答案:

答案 0 :(得分:0)

对于这样的事情,我更喜欢使用switch control structure代替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;,那么您只需要该行一次。

答案 1 :(得分:0)

  

问题是在实际的脚本中我有一个庞大的定义列表   变量现在,和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始终具有预设值。分配只是通过$typeMode['subType']循环中foreach的数组键访问来实现的。