2016-12-11 16 views
2

我有一個數組$車如何在foreach中使用多維數組?

array:1 [ 
    "product" => array:5 [ 
     "product_id" => array:2 [ 
     0 => 2 
     1 => 6 
    ] 
    "product_name" => array:2 [ 
     0 => "HP Core i3 5th Gen - (4 GB/1 TB HDD/DOS) X5Q17PA 15-be005TU Notebook (15.6 inch, Turbo SIlver, 2.19 kg)" 
     1 => "SAMSUNG 55.88cm (22) Full HD LED TV (UA22F5100AR, 2 x HDMI, 2 x USB)" 
    ] 
    "product_description" => array:2 [ 
     0 => "HP Core i3 5th Gen - (4 GB/1 TB HDD/DOS) X5Q17PA 15-be005TU Notebook (15.6 inch, Turbo SIlver, 2.19 kg)HP Core i3 5th Gen - (4 GB/1 TB HDD/DOS) X5Q17PA 15-be005TU Notebook (15.6 inch, Turbo SIlver, 2.19 kg)" 
     1 => "SAMSUNG 55.88cm (22) Full HD LED TV (UA22F5100AR, 2 x HDMI, 2 x USB)" 
    ] 
    "product_image" => array:2 [ 
     0 => "1481116344.jpeg" 
     1 => "1481180186.jpeg" 
    ] 
    "product_price" => array:2 [ 
     0 => 350 
     1 => 200 
    ] 
    ] 
] 

我的購物車頁是這樣的:

@foreach() 
<div class="row"> 
    <div class="col-md-2 col-xs-12"> 
    <img class="img-responsive" src="{{asset('images/150x70.png')}}"> 
    </div> 
    <div class="col-md-4 col-xs-12"> 
    <h4><strong>Product Name</strong></h4> 
    <h4><small>Product Body</small></h4> 
    </div> 
    <div class="col-md-6 col-xs-12"> 
    <div class="col-md-6 text-right"> 
    <h4><strong>$ Price</strong> x</h4> 
    </div> 
    <div class="col-md-4 col-xs-9"> 
    <input type="text" class="form-control input-sm" placeholder="quantity"> 
    </div> 
    <div class="col-md-2 col-xs-2"> 
    <button class="btn btn-danger btn-sm"><span class="glyphicon glyphicon-trash"></span></button> 
    </div> 
    </div> 
</div> 
<hr>  
@endforeach 

輸出看起來像 enter image description here

我如何垃圾郵件的多維這個代碼塊中的數組值。假設有3個產品,那麼應該有3行。

由於PRODUCT_NAME和PRODUCT_DESCRIPTION是不同的陣列,我不能創建一個foreach其中總停留行2,但垃圾郵件的正確名稱和身體一行。

注:我在Laravel框架編碼,這就是爲什麼foreach語法看起來不同。

謝謝!

+3

,如果你有控制在這裏顯示的數組格式,我建議重新映射你的數組,使每個元素包含一個單一的產品,而不是當前的設置,這應該讓你的生活更容易 – haxxxton

+1

同意,你的購物車應該有一個產品陣列,每個擁有自己的財產並且無視其他人。在某些情況下,您可能有一種產品允許客戶在其他產品不更換的情況下更換顏色,這種方法很快就會以這樣簡單的方式分解。 – DelightedD0D

+0

我只是想要進一步同意haxxton和deligtedd0d,您的產品數組應該是包含特定產品的所有重要信息的3個子數組的數組。你現在如何得到它只會讓你頭痛。 – Jhecht

回答

0

如果product_id是您的product數組的一致字段,則可以使用它的長度作爲迭代器計數來對其他鍵執行查找。 警告這裏假設您用於輸出到模板中的所有鍵具有與product_id相同的長度,並且每個鍵中的每個索引都指向同一產品。

你不似乎對quantity一個鍵,以便還沒有填充的領域

<?php for ($i = 0; $i <= count($cart['product']['product_id']); $i++): ?> 
    <div class="row"> 
     <div class="col-md-2 col-xs-12"> 
     <img class="img-responsive" src="<?php echo $cart['product']['product_image'][$i]; ?>"> 
     </div> 
     <div class="col-md-4 col-xs-12"> 
     <h4><strong><?php echo $cart['product']['product_name'][$i]; ?></strong></h4> 
     <h4><small><?php echo $cart['product']['product_description'][$i]; ?></small></h4> 
     </div> 
     <div class="col-md-6 col-xs-12"> 
     <div class="col-md-6 text-right"> 
     <h4><strong>$ <?php echo $cart['product']['product_price'][$i]; ?></strong> x</h4> 
     </div> 
     <div class="col-md-4 col-xs-9"> 
     <input type="text" class="form-control input-sm" placeholder="quantity"> 
     </div> 
     <div class="col-md-2 col-xs-2"> 
     <button class="btn btn-danger btn-sm"><span class="glyphicon glyphicon-trash"></span></button> 
     </div> 
     </div> 
    </div> 
    <hr>  
<?php endfor ?> 

PS。可惜我不熟悉Laravel的語法,所以這是標準PHP


編輯

因爲它沒有坐的權利與我使用我創建了應該把一個轉換函數格式的陣列到的東西更容易管理的

<?php 

function convertCartArray($cart){ 
    // create new container array 
    $products = array(); 
    // create array of all the keys in the old cart that you wish to convert 
    $keys = array('product_id', 'product_name', 'product_description', 'product_image', 'product_price'); 
    // for each product 
    for ($i = 0; $i < count($cart['product']['product_id']); $i++){ 
     // create a new product array 
     $product = array(); 
     // for each of the keys 
     for ($j = 0; $j < count($keys); $j++){ 
      // convert old cart product detail over to product detail 
      $product[$keys[$j]] = $cart['product']$keys[$j][$i]; 
     } 
     // add product to productsArray 
     array_push($products, $product); 
    } 
    // return new products array 
    return $products; 
} 

$productsArray = convertCartArray($cart); 

for ($i = 0; $i <= count($productsArray); $i++): ?> 
    <div class="row"> 
     <div class="col-md-2 col-xs-12"> 
     <img class="img-responsive" src="<?php echo $productsArray[$i]['product_image']; ?>"> 
     </div> 
     <div class="col-md-4 col-xs-12"> 
     <h4><strong><?php echo $productsArray[$i]['product_name']; ?></strong></h4> 
     <h4><small><?php echo $productsArray[$i]['product_description']; ?></small></h4> 
     </div> 
     <div class="col-md-6 col-xs-12"> 
     <div class="col-md-6 text-right"> 
     <h4><strong>$ <?php echo $productsArray[$i]['product_price']; ?></strong> x</h4> 
     </div> 
     <div class="col-md-4 col-xs-9"> 
     <input type="text" class="form-control input-sm" placeholder="quantity"> 
     </div> 
     <div class="col-md-2 col-xs-2"> 
     <button class="btn btn-danger btn-sm"><span class="glyphicon glyphicon-trash"></span></button> 
     </div> 
     </div> 
    </div> 
    <hr>  
<?php endfor ?> 
+0

變量$ cart包含具有'product_id'的產品數組。所以當我運行這個循環時,我得到錯誤未定義的變量:產品 – Phoenix

+0

基本上$ cart-> product-> product id所以我不能直接使用產品的任何方式來處理這個? – Phoenix

+0

@Phoenix,更新爲使用'$ cart ['product']'而不是'$ product' – haxxxton

0

我會重新輸入這樣,但你需要的是@foreach($products as $product)$products是不管你的c urrent變量是。

如果你不想改變輸入(說真的,我推薦它)使用阿列克謝Mezenin的回答

$products = [ 
    ['id' => '2', 
     'name' => 'HP Core i3 5th Gen - (4 GB/1 TB HDD/DOS) X5Q17PA 15-be005TU Notebook (15.6 inch, Turbo SIlver, 2.19 kg)', 
     'description' => 'SAMSUNG 55.88cm (22) Full HD LED TV (UA22F5100AR, 2 x HDMI, 2 x USB)', 
     'image' => '1481116344.jpeg', 
     'price' => '350', 
    ], 
    ['id' => '6', 
     'name' => 'HP Core i3 5th Gen - (4 GB/1 TB HDD/DOS) X5Q17PA 15-be005TU Notebook (15.6 inch, Turbo SIlver, 2.19 kg)HP Core i3 5th Gen - (4 GB/1 TB HDD/DOS) X5Q17PA 15-be005TU Notebook (15.6 inch, Turbo SIlver, 2.19 kg)', 
     'description' => 'SAMSUNG 55.88cm (22) Full HD LED TV (UA22F5100AR, 2 x HDMI, 2 x USB)', 
     'image' => '1481116344.jpeg', 
     'price' => '200', 
    ] 
]; 



@foreach($products as $product) 
    <div class="row"> 
     <div class="col-md-2 col-xs-12"> 
      <img class="img-responsive" src="{{asset($product['image'])}}"> 
     </div> 
     <div class="col-md-4 col-xs-12"> 
      <h4><strong>{{$product['name']}}</strong></h4> 
      <h4><small>{{$product['description']}}</small></h4> 
     </div> 
     <div class="col-md-6 col-xs-12"> 
      <div class="col-md-6 text-right"> 
       <h4><strong>${{$product['price']}}</strong> x</h4> 
      </div> 
      <div class="col-md-4 col-xs-9"> 
       <input type="text" class="form-control input-sm" placeholder="quantity"> 
      </div> 
      <div class="col-md-2 col-xs-2"> 
       <button class="btn btn-danger btn-sm"><span class="glyphicon glyphicon-trash"></span></button> 
      </div> 
     </div> 
    </div> 
    <hr> 
@endforeach 
2

使用@for()的格式來遍歷數組:

@for ($i = 0; $i < count($cart['product']['product_id']); $i++) 
    <div class="row"> 
     <div class="col-md-2 col-xs-12"> 
      <img class="img-responsive" src="{{ asset('images/150x70.png') }}"> 
     </div> 
     <div class="col-md-4 col-xs-12"> 
      <h4><strong>{{ $card['product']['product_name'][$i] }}</strong></h4> 
      <h4><small>{{ $card['product']['product_description'][$i] }}</small></h4> 
     </div> 
     <div class="col-md-6 col-xs-12"> 
      <div class="col-md-6 text-right"> 
      <h4><strong>$ {{ $card['product']['product_price'][$i] }}</strong> x</h4> 
      </div> 
      <div class="col-md-4 col-xs-9"> 
       <input type="text" class="form-control input-sm" placeholder="quantity"> 
      </div> 
      <div class="col-md-2 col-xs-2"> 
      <button class="btn btn-danger btn-sm"><span class="glyphicon glyphicon-trash"></span></button> 
      </div> 
     </div> 
    </div> 
    <hr>  
@endfor 
+0

我得到錯誤'htmlspecialchars()期望參數1是字符串,給定的數組' – Phoenix

+0

我忘了添加'$ i'索引。現在修復。 –

+1

謝謝!有用!你在我的所有laravel問題中幫助我:) – Phoenix