感谢您查看这个问题 - 我对php非常陌生并且在数组上阅读了大量帖子,但似乎无法找到我需要的答案。
我有一个json字符串,我使用json_decode($string, true)
解码。它最多嵌套四层,嵌套级别因文件而异。
我想构建一个关联数组,这样我最终可以将它转换成mysql。
我遇到问题的解码文件部分是:
[LineItems] => Array
(
[0] => Array
(
[ItemNumber] => 1
[Category] => Prep Sink with 18"DB
[SubLineItems] => Array
(
[0] => Array
(
[ItemTypeCode] => 0
[ItemTypeDescription] => Normal
[VendorId] => 55d14674-f295-4f9c-9c37-79f2
... deleted for readability
[CustomerSpecificPricings] => Array
(
.... deleted for readablity
)
[1] => Array
(
[ItemNumber] => 2
[Category] => Combi Oven
[SubLineItems] => Array
(
[0] => Array
(
....
(
)
[ElectricalUtilityGrids] => Array
(
....
)
使用foreeach时,我可以使用以下代码构建[LineItems]数组:
$LineItems=array();
foreach($data['LineItems'] as $lineitems => $lineitem){
$lineadd=array(
$ItemNumber=$lineitem['ItemNumber'],
$Category=$lineitem['Category']
);
}
但是当我尝试添加嵌套数组时:
$LineItems=array();
$SubLineItems=array();
foreach($data['LineItems'] as $lineitems => $lineitem){
$lineadd=array(
$ItemNumber=$lineitem['ItemNumber'],
$Category=$lineitem['Category']
);
$LineItems[]=$lineadd;
foreach($data[LineItems]['SubLineItems'] as $sublineitem => $sublineitems){
$sublineadd[]=array(
$ItemTypeCode=$sublineitem['ItemTypeCode'],
$ItemTypeDescription=$sublineitem['ItemTypeDescription'],
$VendorId=$sublineitem['VendorId'],
... deleted rest of list for readability
);
$SubLineItems[] = $sublineadd;
}
}
在尝试访问SubLineItems的嵌套foreach中,我尝试过:
($lineitem as $sublineitem => $sublineitems),
($data[SubLineItems] as $sublineitem => $sublineitems),
($data[LineItem][SubLineItem] as $sublineitem => $sublineitems)
除了能够将LineItems.SubLineItems索引传递给循环之外......
我在尝试这个时收到了多个错误......我做错了什么?
答案 0 :(得分:0)
我用这个解决了我的问题:
$new_array=array();
$iterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator($json),
RecursiveIteratorIterator::SELF_FIRST
);
foreach ($iterator as $key => $item) {
$new_array[$key]=$item;
}
有更好的解决方案吗?