Reputation: 1442
SELECT m.manufacturers_id, m.manufacturers_name,
op.products_price,
op.products_quantity,
p.products_cost.....
I have these fields and I need to perform php arithmetic on the results, but keep them grouped based on their m.manufacturers_id
. This is the format of the result I need or desire.
Array(
[m.manufacturers_id]
[m.manufacturers_name]
[brands_total_sales ]
(sum of all the products_price * qty for the products in this manufacturers_id)
[products]
[0] =>
[op.products_price] = ''
[op.products_quantity] = ''
[p.products_cost] = ''
[1] =>
[op.products_price] = ''
[op.products_quantity] = ''
[p.products_cost] = ''
[2] =>
Then that repeats for all the products per unique manufacturers_id
. I guess basically the question is, is there a php function to manipulate an array of results to "sort" or "group" into manufacturers_id
Thanks in advance, an help or advise is greatly appreciated.
Upvotes: 0
Views: 52
Reputation: 24116
php script
<pre>
<?php
// Data Source
$db_data = array(
array('manufacturers_id' => 1, 'manufacturers_name' => 'Some Company', 'products_price' => 1.99, 'products_quantity' => 12, 'products_cost' => 0.49),
array('manufacturers_id' => 1, 'manufacturers_name' => 'Some Company', 'products_price' => 1.99, 'products_quantity' => 12, 'products_cost' => 0.49),
array('manufacturers_id' => 2, 'manufacturers_name' => 'Another Company', 'products_price' => 12.99, 'products_quantity' => 112, 'products_cost' => 10.49),
array('manufacturers_id' => 2, 'manufacturers_name' => 'Another Company', 'products_price' => 12.99, 'products_quantity' => 112, 'products_cost' => 10.49),
);
// Sort Data
$db_data_sorted = array();
foreach ($db_data as $data) {
$db_data_sorted[$data['manufacturers_id']][$data['manufacturers_name']]['brands_total_sales'] += (intval($data['products_quantity']) * floatval($data['products_price']));
$db_data_sorted[$data['manufacturers_id']][$data['manufacturers_name']]['products'][] = array(
'products_price' => $data['products_price'],
'products_quantity' => $data['products_quantity'],
'products_cost' => $data['products_cost']
);
}
// Debug
print_r($db_data_sorted);
?>
output:
Array
(
[1] => Array
(
[Some Company] => Array
(
[brands_total_sales] => 47.76
[products] => Array
(
[0] => Array
(
[products_price] => 1.99
[products_quantity] => 12
[products_cost] => 0.49
)
[1] => Array
(
[products_price] => 1.99
[products_quantity] => 12
[products_cost] => 0.49
)
)
)
)
[2] => Array
(
[Another Company] => Array
(
[brands_total_sales] => 2909.76
[products] => Array
(
[0] => Array
(
[products_price] => 12.99
[products_quantity] => 112
[products_cost] => 10.49
)
[1] => Array
(
[products_price] => 12.99
[products_quantity] => 112
[products_cost] => 10.49
)
)
)
)
)
Upvotes: 2
Reputation: 6873
Maybe something like :
$response = array();
while($row = mysql_fetch_array($result)) {
$response[$row['m.manufacturers_id']][$row['m.manufacturers_name']][$row['op.products_id']] = array(
$row['op.products_price'],
$row['op.products_quantity'],
$row['p.products_cost']);
}
Upvotes: 0