我有以下json文件,其中包含产品详细信息:
"products": [
{
"sku": 123,
"name": "iphone 7",
"categoryPath": [
{
"id": "abcat0800000",
"name": "Cell Phones"
},
{
"id": "pcmcat209400050001",
"name": "All Cell Phones with Plans"
}
],
}
]
我只想存储categoryPath数组的最后一个值(ID和NAME):
"id": "pcmcat209400050001", "name": "All Cell Phones with Plans"
我当前的代码获取json文件,解码json并在products表中插入信息。
$json = File::get("/json/cell-0.json");
$data = json_decode($json);
$array1 = (array)$data;
//table products
foreach ($array1['products'] as $obj) {
DB::table('products')->insert(array(
'productSku' => ((isset($obj->sku) ? $obj->sku : 1)),
'productName' => ((isset($obj->name) ? $obj->name : null)),
'categoryId' => end($obj->categoryPath->id),
'categoryName' => end($obj->categoryPath->name)
));
考虑到array-> categoryPath有多个字段我想使用一个函数(例如:end()),以便只获取最后一个值的id和名称。
使用end($ obj-> categoryPath-> id)我收到以下错误 - >
尝试修改非对象的属性
这是检索多维数组的最后一个值的最佳方法吗?
答案 0 :(得分:1)
您获取最后一个元素的方式不正确,这里是重构的代码。我也消除了将数据转换为数组的需要。
$json = File::get("/json/cell-0.json");
$data = json_decode($json, true);
//table products
foreach ($data['products'] as $product) {
$lastCategory = isset($product['categoryPath']) && $size = sizeof($product['categoryPath']) ? $product['categoryPath'][$size-1] : array('id' => null, 'name' => null);
DB::table('products')->insert(
array(
'productSku' => isset($product['sku']) ? $product['sku'] : 1,
'productName' => isset($product['name']) ? $product['name'] : null,
'categoryId' => lastCategory['id'],
'categoryName' => lastCategory['name']
)
);
}
答案 1 :(得分:1)
你可以使用end()但你的访问者必须在end()调用之外(未经测试):
foreach ($array1['products'] as $obj) {
DB::table('products')->insert(array(
'productSku' => ((isset($obj->sku) ? $obj->sku : 1)),
'productName' => ((isset($obj->name) ? $obj->name : null)),
'categoryId' => end($obj->categoryPath)->id,
'categoryName' => end($obj->categoryPath)->name
));