I have the following array, the first item in the array has a quantity of 3 while the rest has a quantity of 1. These numbers are dynamic.
JavaScript
x
Array
(
[0] => Array
(
[id] => 39235995
[quantity] => 3
[price] => 2.81
)
[1] => Array
(
[id] => 39236029
[quantity] => 1
[price] => 2.952
)
[2] => Array
(
[id] => 39236015
[quantity] => 1
[price] => 3.333
)
[3] => Array
(
[id] => 39235997
[quantity] => 1
[price] => 2.667
)
)
How can I change that to the following output? So the first item that did have a quantity of 3 is now separated out into 3 array items and the quantity set to one for each?
JavaScript
Array
(
[0] => Array
(
[id] => 39235995
[quantity] => 1
[price] => 2.81
)
[1] => Array
(
[id] => 39235995
[quantity] => 1
[price] => 2.81
)
[2] => Array
(
[id] => 39235995
[quantity] => 1
[price] => 2.81
)
[3] => Array
(
[id] => 39236029
[quantity] => 1
[price] => 2.952
)
[4] => Array
(
[id] => 39236015
[quantity] => 1
[price] => 3.333
)
[5] => Array
(
[id] => 39235997
[quantity] => 1
[price] => 2.667
)
)
Advertisement
Answer
You can loop over the original arr and push the contents to a second array. If the quanity > 1 you can create a loop that pushes the item for each quanity. Something like this:
JavaScript
$resultArr = [];
foreach($arrA as $item){
for($i = 0; $i < $item['quantity']; $i++){
// make sure the quantity is now 1 and not the original > 1 value
$t = $item;
$t['quantity'] = 1;
$resultArr[] = $t;
}
}
Note that the code expects your original array to be called $arrA
Edit: removed the if/else
as suggested in the comments