Javascript 替换关联数组中的值

Javascript 替换关联数组中的值,javascript,php,arrays,angularjs,Javascript,Php,Arrays,Angularjs,我试图将一个数组从PHP回显到我的javascript应用程序,并根据匹配项更改键的值 $stmt = $con->prepare($sql); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach($result as $key => $value) { if ($key == 'Service' && $value == '1') $resu

我试图将一个数组从PHP回显到我的javascript应用程序,并根据匹配项更改键的值

$stmt = $con->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($result as $key => $value) {
    if ($key == 'Service' && $value == '1')
        $result[$key[$value]] = 'Dinner';
    if ($key == 'Service' && $value == '2')
        $result[$key[$value]] = 'Lunch';
    if ($key == 'Service' && $value == '3')
        $result[$key[$value]] = 'Breakfast';
}
基本上,一个数据库有对应于某些服务的数字条目,我试图改变数字以反映实际的服务,但到目前为止,我所做的任何尝试都不起作用

我唯一能确定的是,上面的代码是错误的,而且非常丑陋。是否有一个PHP函数可以实现我想要的功能

另一方面,在javascript端更改值可能更容易,但我也无法做到这一点

我使用ajax、angular$http方法检索数据

.then(function (response) {
    console.log(response);
    $scope.userData = {};
    $scope.userData = response.data;
我试着在回应中做出改变

if (response.data.services == '1') {
    response.data.services = 'Dinner'; 
} 
但这不起作用

也试过

if ($scope.userData.services == '1') {
    $scope.userData.services == 'Dinner';
}

不起作用,但我怀疑即使它起作用,也不会改变response.data.services的所有值,以正确显示引用的服务

您可以使用数组进行映射/查找:

// One-time definition
$services = ['1' => 'Dinner', '2' => 'Lunch', '3' => 'Breakfast'];
// Your code...
$stmt = $con->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($result as &$row)
{
    // If the key is set and is mapped in $services
    if(isset($row['Service']) && isset($services[$row['Service']]))
    {
        // Then replace it
        $row['Service'] = $services[$row['Service']];
    }
}

我认为如果您仅用
$key
替换
$key[$value]
,您的代码也会工作,但是如果您只需要一个特定的键,那么使用foreach循环是一种浪费。

代码应该正常工作,这里缺少的唯一一点是,如果您不将值作为引用(&)传递,因此,当前无法在结果数组中进行更改。你也可以分组

foreach ($result as $key => &$value) {

}

如果直接赋值,则只需将
$value
作为参考。如果使用
$result[$key]
,则不需要这样做。此外,OP的代码也不能正常工作,因为它们使用
$key[$value]
而不是
$key
$ar=(“‘晚餐’、‘午餐’、‘早餐’”)。。。如果($key=='Service')$result[$key]=$ar[$value]
@splash58-也不起作用:(我试着用$key代替,没有改变。你的代码看起来当然干净多了。问题是,结果可能是几行$services每行都不同。@HenrikM对,这是一个
fetchAll
,我的错。在if周围添加了一个foreach循环。