将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