首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在将mysql颜色值添加到php数组时替换它们

在将mysql颜色值添加到php数组时替换它们
EN

Stack Overflow用户
提问于 2015-02-24 16:43:40
回答 1查看 22关注 0票数 1

我有一个名为“当前状态”的表,它有三列,称为:

代码语言:javascript
运行
复制
id  name    state
1   FXD     1
2   GFX     3
3   ATOM    2
4   FARB    3
5   REX     1
6   FRX     2

在下面的代码中,我将它放入数组并打印出来:

代码语言:javascript
运行
复制
$exc = $conn->prepare("SELECT name,state from current_state");
        $exc->execute();
            while($finalResult = $exc->fetch(PDO::FETCH_ASSOC))
             {
                        $tables[] = $finalResult;
             }
var_dump($tables);

但问题是,尽管数字表示状态列值,但这些数字中的每一个都有意义:

代码语言:javascript
运行
复制
1 = running
2 = finished
3 = dimnished

,所以我想要的是,通过比较state列的值,立即将上面的字符串值添加到表数组中。

列的当前打印结果如下所示

代码语言:javascript
运行
复制
array (size=2)
  'name' => string 'FRX' (length=11)
  'state' => string '2' (length=1)

但我想要的是

代码语言:javascript
运行
复制
array (size=2)
      'name' => string 'FRX' (length=11)
      'state' => string 'finished' (length=8)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-24 16:51:10

您可以使用CASE表达式在SQL中执行此操作:

代码语言:javascript
运行
复制
SELECT name,
        CASE state
            WHEN 1 THEN 'running'
            WHEN 2 THEN 'finished'
            WHEN 3 THEN 'diminished'
        END AS state
FROM current_state

或者您可以使用一个数组在PHP中这样做:

代码语言:javascript
运行
复制
$statemap = array(1 => 'running', 2 => 'finished', 3 => 'diminished');

然后,PHP循环将执行映射:

代码语言:javascript
运行
复制
while ($finalResult = $exc->fetch(PDO::FETCH_ASSOC)) {
    $finalResult['state'] = $statemap[$finalResult['state']];
    $tables[] = $finalResult;
}

最后,您可以有另一个包含映射的表,并与它连接:

代码语言:javascript
运行
复制
CREATE TABLE state_mappings (
    state_num INT PRIMARY KEY,
    state_name VARCHAR(20)
);

SELECT name, state_name
FROM state AS s
JOIN state_mappings AS m ON s.state = m.state_num
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28701405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档