Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将mysql列值添加到php数组时替换它们_Php_Mysql - Fatal编程技术网

将mysql列值添加到php数组时替换它们

将mysql列值添加到php数组时替换它们,php,mysql,Php,Mysql,我有一个名为“当前状态”的表,它有三列,称为: id name state 1 FXD 1 2 GFX 3 3 ATOM 2 4 FARB 3 5 REX 1 6 FRX 2 在以下代码中,我将其放入数组并打印: $exc = $conn->prepare("SELECT name,state from current_state"); $exc->execute();

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

id  name    state
1   FXD     1
2   GFX     3
3   ATOM    2
4   FARB    3
5   REX     1
6   FRX     2
在以下代码中,我将其放入数组并打印:

$exc = $conn->prepare("SELECT name,state from current_state");
        $exc->execute();
            while($finalResult = $exc->fetch(PDO::FETCH_ASSOC))
             {
                        $tables[] = $finalResult;
             }
var_dump($tables);
但问题是,尽管数字代表状态列值,但这些数字中的每一个都有其含义:

1 = running
2 = finished
3 = dimnished
因此,我想通过比较state列的值,将上述字符串值立即添加到tables数组中。

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

array (size=2)
  'name' => string 'FRX' (length=11)
  'state' => string '2' (length=1)
但我想要的是:

array (size=2)
      'name' => string 'FRX' (length=11)
      'state' => string 'finished' (length=8)

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

SELECT name,
        CASE state
            WHEN 1 THEN 'running'
            WHEN 2 THEN 'finished'
            WHEN 3 THEN 'diminished'
        END AS state
FROM current_state
或者,您可以在PHP中使用数组执行此操作:

$statemap = array(1 => 'running', 2 => 'finished', 3 => 'diminished');
然后,您的PHP循环将进行映射:

while ($finalResult = $exc->fetch(PDO::FETCH_ASSOC)) {
    $finalResult['state'] = $statemap[$finalResult['state']];
    $tables[] = $finalResult;
}
最后,您可以拥有另一个包含映射的表,并与之连接:

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