php 数组里包含多个数组items解析成json方法:
$json_str = '{
"mid": "e34ed1c2d4",
"amount": 254,
"currency": "USD",
"external_order_id": "11",
"order_type": "GTC",
"application": "sed",
"version": "nostrud",
"checksum": "{checksum}",
"gateway": "KHFTBCRC3102",
"items": [
{
"currency":"USD",
"name": "Apple iPad with Retina",
"price": 55,
"quantity": 1
},
{
"currency":"USD",
"name": "Beats Solo Wireless",
"price": 199,
"quantity": 1
}],
"shipping_address": {
"first_name": "lin",
"last_name": "lastname",
"country": "DE",
"city": "hamburg city",
"address1": "this street address",
"postal_code": "10086",
"email": "10000@qq.com",
"phone": "12114569874",
"phone_country": "1",
"state": "Bayern"
},
"external_data": "test"
}';
echo "<hr/>";
echo "原始数据:";
var_dump($json_str);
echo "<pre/>";
$de_str = json_decode($json_str);
var_dump($de_str);
//die;
---------------------------------------------------
原始json数据:string(1057) "{ "mid": "e34ed1c2d4", "amount": 254, "currency": "USD", "external_order_id": "11", "order_type": "GTC", "application": "sed", "version": "nostrud", "checksum": "{checksum}", "gateway": "KHFTBCRC3102", "items": [ { "currency":"USD", "name": "Apple iPad with Retina", "price": 55, "quantity": 1 }, { "currency":"USD", "name": "Beats Solo Wireless", "price": 199, "quantity": 1 }], "shipping_address": { "first_name": "lin", "last_name": "lastname", "country": "DE", "city": "hamburg city", "address1": "this street address", "postal_code": "10086", "email": "10000@qq.com", "phone": "12114569874", "phone_country": "1", "state": "Bayern" }, "external_data": "test" }"
---------------------------------------------------
json_decode 后的数据格式:
object(stdClass)#1 (12) { ["mid"]=> string(10) "e34ed1c2d4" ["amount"]=> int(254) ["currency"]=> string(3) "USD" ["external_order_id"]=> string(2) "11" ["order_type"]=> string(3) "GTC" ["application"]=> string(3) "sed" ["version"]=> string(7) "nostrud" ["checksum"]=> string(10) "{checksum}" ["gateway"]=> string(12) "KHFTBCRC3102" ["items"]=> array(2) { [0]=> object(stdClass)#2 (4) { ["currency"]=> string(3) "USD" ["name"]=> string(22) "Apple iPad with Retina" ["price"]=> int(55) ["quantity"]=> int(1) } [1]=> object(stdClass)#3 (4) { ["currency"]=> string(3) "USD" ["name"]=> string(19) "Beats Solo Wireless" ["price"]=> int(199) ["quantity"]=> int(1) } } ["shipping_address"]=> object(stdClass)#4 (10) { ["first_name"]=> string(3) "lin" ["last_name"]=> string(8) "lastname" ["country"]=> string(2) "DE" ["city"]=> string(12) "hamburg city" ["address1"]=> string(19) "this street address" ["postal_code"]=> string(5) "10086" ["email"]=> string(12) "10000@qq.com" ["phone"]=> string(11) "12114569874" ["phone_country"]=> string(1) "1" ["state"]=> string(6) "Bayern" } ["external_data"]=> string(4) "test" }
---------------------------------------------------
重点:数组直接转json方式:
---------------------------------------------------
//只把数组的内层转为object
function array_to_object3($arr) {
if (gettype($arr) == 'array' ) {
foreach ($arr as $k => $v) {
if (gettype($v) == 'array') {
$arr[$k] = (object)array_to_object3($v);
}
}
return $arr;
}else{
return;
}
}
$arrHashCode['items'] = array_to_object3($GoodsArr);
//注: 因为json_encode (把数组转json)只转化最外层的数组,内层的数组不能转,所以内层的数组要额外转object格式
$json_str=json_encode($arrHashCode);
================================================================================================
附:
// 数组转对象,全转化
public function array_to_object($arr) {
if (gettype($arr) == 'array' ) {
foreach ($arr as $k => $v) {
if (gettype($v) == 'array' || getType($v) == 'object') {
$arr[$k] = (object)$this->array_to_object($v);
}
}
return (object)$arr;
}elseif (getType($arr) == 'object') {
return (object)$arr;
}else{
return;
}
}
// 对象转数组
function object_to_array($obj){
$_arr=is_object($obj)?get_object_vars($obj):$obj;
//内排序
//ksort($_arr);
$arr = null;
foreach($_arr as $key=>$val){
$val=(is_array($val))||is_object($val)?object_to_array($val):$val;
$arr[$key]=$val;
}
return $arr;
}
//数组转连接符
function array2String($arr = null){
if(is_null($arr) or !is_array($arr))
return false;
$str = '';
$arr_length = count($arr)-1;
foreach( $arr as $key => $value ){
if ($key=='checksum'){
continue;
}
$type=gettype($value);
if ($type=='array') {
$tostr=json_encode($value);
$str.=$key.'='.$tostr.'&';
}else{
$str.=$key.'='.$value.'&';
}
}
return urldecode($str); // 必须使用urldecode()方法处理明文字符串
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?