哪个在 PHP 中更有效,从嵌套开关案例的数据库中 explode()


Which is more efficient in PHP, explode() from a database of nested switch case

>我正在编写一个系统,通过收集上传到系统的奖杯数据来记录用户在游戏中的成就,它让它工作正常,但我已经开始考虑我可以用 2 种不同方式完成的系统的一部分

系统的这一部分收集奖杯的等级(青铜、白银、黄金、水晶、翡翠(及其价值,每个用户作为游戏表中的记录,除表主键和user_id外键之外的每个字段代表每个奖杯,可以按照它们的确切列出顺序获得, 这意味着它们不会以机器可以轻松搜索的任何方式进行排序。

我是如何战斗的,这是有另一个表格,每条记录都包含游戏和一个字符串,其中列出了奖杯的排名顺序,以|'所以当我使用爆炸(字符串,"|"(我得到一个数组,数组的每个索引都是一个字符,它看起来像这样

b|b|s|g|

c|g|s|j

这只是奖杯排名,积分值是通过我传递游戏 ID 和奖杯 ID 的功能完成的,开关案例语句将首先检查我通过了哪场比赛,而每种情况下的嵌套开关案例将检查 ID,在每种情况下,它们都返回奖杯的积分值

当然我没有计划我的代码,上面的排名字符串最初没有 | 而且我没有做这样的点值,因为与排名不同,分数值 van 非常在 1 到 3 位之间,现在我知道我可以对点值做同样的事情,就像我对排名顺序所做的

那样

我想知道哪种方法对 Web 服务器和浏览器更有效,从数据库中提取字符串并使用 explode(STRING,"|"((和 intval(( 将点值从字符串转换为整数,需要像这样进行计算(或使用 switch case 语句调用函数,例如查找表,或者我已经拥有的足够有效

真的没有兴趣尝试以完全不同的方式做我正在做的事情,只是为了让它更有效,因为这些方法完全适合我正在使用它们的嵌套循环

尝试重建你的数据库,可能会有一个与用户有很多2many关系的表成就,奖杯表。列用户 ID、奖杯 ID、总积分和/或其他数据,您可以通过视图获取用户名、奖杯类型和积分

我认为最好使用序列化PHP函数:

public function setValues($values) {
    if (is_array($values)) {
        $this->setFieldValue('values', serialize($values)); // for db field
    } elseif (is_string($values)) {
        $this->setFieldValue('values', serialize(explode(",", $values)));  // for db field
    } else {
        throw new Exception("Invalid values data format");
    }
}
public function getValues() {
    $values = $this->getFieldValue('values'); // or something else getting field data from DB
    if ($values == "") {
        return array();
    } else {
        return unserialize($values);
    }
}

在此cae中,您可以快速简便地存储和恢复数据。