Laravel php获取多维数组中的最后一个元素
我有以下包含产品详细信息的json文件:Laravel php获取多维数组中的最后一个元素,php,arrays,json,laravel-5,Php,Arrays,Json,Laravel 5,我有以下包含产品详细信息的json文件: "products": [ { "sku": 123, "name": "iphone 7", "categoryPath": [ { "id": "abcat0800000", "name": "Cell Phones" }, { "id": "pcmcat209400050001",
"products": [
{
"sku": 123,
"name": "iphone 7",
"categoryPath": [
{
"id": "abcat0800000",
"name": "Cell Phones"
},
{
"id": "pcmcat209400050001",
"name": "All Cell Phones with Plans"
}
],
}
]
我只想存储categoryPath数组的最后一个值(ID和名称):
我当前的代码获取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)我收到以下错误->
尝试修改非对象的属性
这是检索多维数组最后一个值的最佳方法吗?获取最后一个元素的方法不正确,下面是重构代码。我还消除了将数据转换为数组的需要
$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']
)
);
}
您可能会使用end(),但您的访问器必须位于end()调用之外(未测试):
我试过这个例子$在$lastCategory的第二部分中未检测到大小。另一种选择更简单。非常感谢@Augwa
$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']
)
);
}
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
));