在 PHP 数组中添加键值

3

我正在学习数组,想知道如何给这种类型的数组添加键(key)?

{  
   "items":[  
      {  
         "count":"1",
         "id":123,
         "description":"Bag",
         "price":11

      },
      {  
         "count":1,
         "id":1234,
         "description":"10% Discount",
         "price":-1.1

      }
   ],
   "total":9.9,
   "discount_total":9.9
}

因为我需要将数组根据其中的id作为键来进行转换。

{  
   "items":{  
      "123":{  
         "count":"1",
         "cart_id":123,
         "description":"Bag",
         "price":11
      },
      "1234":{  
         "count":1,
         "cart_id":1234,
         "description":"10% Discount",
         "price":-1.1
      }
   },
   "total":9.9,
   "discount_total":9.9
}

这是我的代码:

header('Content-Type: application/json');
$cart_array = json_decode('{  
   "items":[  
      {  
         "count":"1",
         "cart_id":123,
         "plu":"TP16",
         "description":"Bag"

      },
      {  
         "count":1,
         "cart_id":1234,
         "plu":"DISCT10",
         "description":"10% Discount"

      }
   ],
   "total":9.9,
   "discount_total":9.9
}');

foreach ($cart_array->items as $item)
{
    $construct["cart_id"] = $item->cart_id;
}

我想问一下如何将ID放入数组中?我不能使用$cart_array['id'] = $value,它会返回错误。

未捕获错误:无法使用stdClass类型的对象作为数组

我真的需要一些解释。


可能是重复问题:如何向数组添加键值对? - Unknown
@piyush 是的,我看了一下并试图理解它,看起来这就是我要找的。还有一件事我缺少的是将json_decode设置为true。谢谢! - kairi
4个回答

2
以下代码可以帮助您:
<?php
$json = '{  
   "items":[  
      {  
         "count":"1",
         "cart_id":123,
         "plu":"TP16",
         "description":"Small Four Seasons"

      },
      {  
         "count":1,
         "cart_id":1234,
         "plu":"DISCT10",
         "description":"10% Discount"

      }
   ],
   "total":9.9,
   "discount_total":9.9
}';
$data = json_decode($json,TRUE); //json decode 
foreach ($data['items'] as $key => $value) 
{
    $data['items'][$value['cart_id']] = $value;
    unset($data['items'][$key]);
} 
echo "<pre>";print_r($data);die;
?>

1
你可以在应用程序中使用此代码将键添加到索引数组中。
foreach($obj as $key=>$val){
  foreach ($val as $index=>$content){
    $data[$content['id']]=$content;
  }
}

1
你可以获得与你想要的相同的输出JSON数据:
$array = json_decode($data,true);
if(isset($array['items']) && count($array['items']) > 0){
    foreach($array['items'] as $key => $value){
        $value['cart_id'] = $value['id'];
         unset($value['id']);
        $array['items'][$value['cart_id']] = $value;
        unset($array['items'][$key]);

                   }
}
echo "<pre>";print_r($array);
echo json_encode($array);

1

你根本不需要循环。你可以使用array_column一行代码就能将数组转换为关联数组。

$cart_array['items'] = array_column($cart_array['items'], NULL, 'cart_id');

https://3v4l.org/cPD5n


1
我更改了正确的答案,因为这也回答了我在解构数组(在某些验证后删除键)方面的另一个问题,谢谢。 - kairi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接