查询:
SELECT t1.`id`, t1.`year` as service_year, t5.`month` as service_month, t6.id as country_id, t6.`country`, t7.`id` as mobile_operator_id, t7.`mobile_operator`, t1.`service_id`, t1.`gross_revenue_actual`, t1.`content_partner_share`
, t2.`service`
, t4.`collected_at`, t4.`id` as invoice_id
FROM `PaymentCollections` t1
JOIN `Services` t2 ON t1.`service_id` = t2.`id`
JOIN `PaymentCollectionInvoiceItems` t3 ON t3.`payment_collection_id` = t1.`id`
JOIN `PaymentCollectionInvoices` t4 ON t4.`id` = t3.`invoice_id`
JOIN `Months` t5 ON t5.`id` = t1.`month`
JOIN `Countries` t6 ON t6.`id` = t2.`country_id`
JOIN `MobileOperators` t7 ON t7.`id` = t2.`mobile_operator_id`
WHERE t1.`payment_collection_status_id` = 18
GROUP BY t1.`year`, t1.`month` ORDER BY t1.`year` DESC, t1.`month` ASC
当我在典型查询上运行时,找到了一个数组:
[0] => stdClass Object
(
[id] => 5132
[service_year] => 2016
[service_month] => April
[country_id] => 116
[country] => Kenya
[mobile_operator_id] => 3
[mobile_operator] => Airtel
[service_id] => 16
[gross_revenue_actual] => 11500.000000
[content_partner_share] => 1000.000000
[service] => Christianity Portal
[collected_at] => 2016-06-24 09:59:19
[invoice_id] => 105
)
[1] => stdClass Object
(
[id] => 4982
[service_year] => 2016
[service_month] => May
[country_id] => 116
[country] => Kenya
[mobile_operator_id] => 3
[mobile_operator] => Airtel
[service_id] => 16
[gross_revenue_actual] => 11500.000000
[content_partner_share] => 1000.000000
[service] => Christianity Portal
[collected_at] => 2016-06-24 10:02:21
[invoice_id] => 106
)
[2] => stdClass Object
(
[id] => 4732
[service_year] => 2016
[service_month] => June
[country_id] => 116
[country] => Kenya
[mobile_operator_id] => 3
[mobile_operator] => Airtel
[service_id] => 16
[gross_revenue_actual] => 11000.000000
[content_partner_share] => 1000.000000
[service] => Christianity Portal
[collected_at] => 2016-06-24 13:13:42
[invoice_id] => 114
)
[3] => stdClass Object
(
[id] => 5522
[service_year] => 2015
[service_month] => December
[country_id] => 51
[country] => Congo(Republic of)
[mobile_operator_id] => 31
[mobile_operator] => MTN
[service_id] => 56
[gross_revenue_actual] => 11500.000000
[content_partner_share] => 1000.000000
[service] => Music On Demand
[collected_at] => 2016-06-24 11:26:09
[invoice_id] => 101
)
通过使用上面的数组,如果service_year
,country
,mobile_operator
,service
相同但月份不同,那么我想创建新的数组,如下所示
$finalarray = {
0 = {
[id] => 4732,
[service_year] => 2016,
[service] => Christianity Portal,
[country] => Kenya,
[mobile_operator] => Airtel,
array{
array[April] {
[gross_revenue_actual] => 11500.000000
[content_partner_share] => 1000.000000
[collected_at] => 2016-06-24 10:02:21
},
array[May] {
[gross_revenue_actual] => 11000.000000
[content_partner_share] => 1000.000000
[collected_at] => 2016-06-24 13:13:42
},
array[June] {
[gross_revenue_actual] => 11000.000000
[content_partner_share] => 1000.000000
[collected_at] => 2016-06-24 13:13:42
},
}
}
1 = {
[id] => 5522
[service_year] => 2015
[service_month] => December
[country_id] => 51
[country] => Congo(Republic of)
[mobile_operator_id] => 31
[mobile_operator] => MTN
[service_id] => 56
[gross_revenue_actual] => 11500.000000
[content_partner_share] => 1000.000000
[service] => Music On Demand
[collected_at] => 2016-06-24 11:26:09
[invoice_id] => 101
}
}
当我使用Laravel 5框架时,我该怎么做?是否可以修改我的查询以获得这种类型的数组?
我感谢所有的提示和回应。谢谢。
答案 0 :(得分:3)
你可以用以下方式解析php中的数组,
INPUT: -
$result = array('0' =>
array(
'id' => 5132,
'service_year' => 2016,
'service_month' => 'April',
'country_id' => 116,
'country' => 'Kenya',
'mobile_operator_id' => 3,
'mobile_operator' => 'Airtel',
'service_id' => 16,
'gross_revenue_actual' => 11500.000000,
'content_partner_share' => 1000.000000,
'service' => 'Christianity Portal',
'collected_at' => '2016-06-24 09:59:19',
'invoice_id' => 105
),
'1' =>
array(
'id' => 4982,
'service_year' => 2016,
'service_month' => 'May',
'country_id' => 116,
'country' => 'Kenya',
'mobile_operator_id' => 3,
'mobile_operator' => 'Airtel',
'service_id' => 16,
'gross_revenue_actual' => 11500.000000,
'content_partner_share' => 1000.000000,
'service' => 'Christianity Portal',
'collected_at' => '2016-06-24 10:02:21',
'invoice_id' => 106
),
'2' =>
array(
'id' => 4732,
'service_year' => 2016,
'service_month' => 'June',
'country_id' => 116,
'country' => 'Kenya',
'mobile_operator_id' => 3,
'mobile_operator' => 'Airtel',
'service_id' => 16,
'gross_revenue_actual' => 11000.000000,
'content_partner_share' => 1000.000000,
'service' => 'Christianity Portal',
'collected_at' => '2016-06-24 13:13:42',
'invoice_id' => 114,
),
'3' =>
array(
'id' => 5522,
'service_year' => 2015,
'service_month' => 'December',
'country_id' => 51,
'country' => 'Congo(Republic of)',
'mobile_operator_id' => 31,
'mobile_operator' => 'MTN',
'service_id' => 56,
'gross_revenue_actual' => 11500.000000,
'content_partner_share' => 1000.000000,
'service' => 'Music On Demand',
'collected_at' => '2016-06-24 11:26:09',
'invoice_id' => 101,
));
这是您需要用来解析上面数组以获得所需结果的PHP代码。
<?php
$arraycheck = array();
$finalArray = array();
$counter = 0;
foreach ($result as $key => $values) {
$flag = 0;
$id = 0;
$month = 0;
foreach ($arraycheck as $k => $v) {
if ($v['service_year'] == $values['service_year'] &&
$v['country'] == $values['country'] &&
$v['mobile_operator'] == $values['mobile_operator'] &&
$v['service'] == $values['service']) {
$flag = 1;
$id = $k;
$month = $v['service_month'];
break;
}
}
if ($flag == 0) {
$arraycheck[$values['id']]['service_year'] = $values['service_year'];
$arraycheck[$values['id']]['country'] = $values['country'];
$arraycheck[$values['id']]['mobile_operator'] = $values['mobile_operator'];
$arraycheck[$values['id']]['service'] = $values['service'];
$arraycheck[$values['id']]['service_month'] = $values['service_month'];
$finalArray[$values['id']] = $values;
}
if ($flag == 1 && !empty($id)) {
$finalArray[$id][$month]['gross_revenue_actual'] = $finalArray[$id]['gross_revenue_actual'];
$finalArray[$id][$month]['content_partner_share'] = $finalArray[$id]['content_partner_share'];
$finalArray[$id][$month]['collected_at'] = $finalArray[$id]['collected_at'];
$finalArray[$id][$values['service_month']]['gross_revenue_actual'] = $values['gross_revenue_actual'];
$finalArray[$id][$values['service_month']]['content_partner_share'] = $values['content_partner_share'];
$finalArray[$id][$values['service_month']]['collected_at'] = $values['collected_at'];
unset($finalArray[$id]['gross_revenue_actual']);
unset($finalArray[$id]['content_partner_share']);
unset($finalArray[$id]['collected_at']);
unset($finalArray[$id]['service_month']);
}
$counter++;
}
echo "<pre>";
print_r($finalArray);
die;
?>
输出: - 输出将是这样的
Array
(
[5132] => Array
(
[id] => 5132
[service_year] => 2016
[country_id] => 116
[country] => Kenya
[mobile_operator_id] => 3
[mobile_operator] => Airtel
[service_id] => 16
[service] => Christianity Portal
[invoice_id] => 105
[April] => Array
(
[gross_revenue_actual] =>
[content_partner_share] =>
[collected_at] =>
)
[May] => Array
(
[gross_revenue_actual] => 11500
[content_partner_share] => 1000
[collected_at] => 2016-06-24 10:02:21
)
[June] => Array
(
[gross_revenue_actual] => 11000
[content_partner_share] => 1000
[collected_at] => 2016-06-24 13:13:42
)
)
[5522] => Array
(
[id] => 5522
[service_year] => 2015
[service_month] => December
[country_id] => 51
[country] => Congo(Republic of)
[mobile_operator_id] => 31
[mobile_operator] => MTN
[service_id] => 56
[gross_revenue_actual] => 11500
[content_partner_share] => 1000
[service] => Music On Demand
[collected_at] => 2016-06-24 11:26:09
[invoice_id] => 101
)
)
我希望这会帮助你