2017-04-07 281 views
1

我有產品的詳細信息如下JSON文件:Laravel的PHP獲得最後一個元素的多維數組

"products": [ 
    { 
     "sku": 123, 
     "name": "iphone 7", 
     "categoryPath": [ 
     { 
      "id": "abcat0800000", 
      "name": "Cell Phones" 
     }, 
     { 

      "id": "pcmcat209400050001", 
      "name": "All Cell Phones with Plans" 

     } 
     ], 
} 
] 

我想只存儲最後一個值categoryPath陣列(ID和名稱):

  "id": "pcmcat209400050001", 
      "name": "All Cell Phones with Plans" 

我當前的代碼需要JSON文件,解碼JSON和產品表中插入的信息。

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

考慮到基於陣列> categoryPath有多個領域,我想使用的功能(例如:結束())以只取最後一個值的ID和名稱。

使用結束($ obj-> categoryPath-> ID),我收到以下錯誤 - >

試圖修改非對象

的屬性這是檢索的最佳方式多維數組的最後一個值?

回答

1

你可以()可能使用結束,但你的訪問者必須是結束()調用(未經測試)以外:

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 
    )); 
+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'] 
     ) 
    ); 
} 
+0

我試過的例子。 $ lastCategory的第二部分未檢測到$ size。另一種選擇更簡單。非常感謝你@Augwa –

相關問題