Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel php获取多维数组中的最后一个元素_Php_Arrays_Json_Laravel 5 - Fatal编程技术网

Laravel php获取多维数组中的最后一个元素

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",

我有以下包含产品详细信息的json文件:

  "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
    ));