我有2个Array,两个Array共同的是Director_id来匹配
我试图用另一个数组的值映射一个数组的键。
$invest_details = DB::table('directors_invest')
->join('directors', 'directors.id', '=', 'directors_invest.director_id')
->select('directors_invest.*', 'directors.name as directors_name')
->get();
##
$expense_details = DB::table('receipts')
->join('directors', 'directors.id', '=', 'receipts.director_id')
->join('account_type', 'account_type.id', '=', 'receipts.type')
->join('expense_type', 'expense_type.id', '=', 'receipts.exp_earn_type')
->select('receipts.*', 'directors.name as directors_name', 'account_type.name as account_name', 'expense_type.name as exp_name')
->get();
//dd($expense_details);
$director = DB::table('directors')->get();
$directors = [];
foreach ($director as $value) {
$directors[$value->id] = $value->name;
}
// Here I will map Director_id and total invest
$investor_total_by_id = [];
foreach ($expense_details as $exp) {
if (isset($investor_total_by_id[$exp->director_id])) {
$investor_total_by_id[$exp->director_id] += $exp->amount;
} else {
$investor_total_by_id[$exp->director_id] = $exp->amount;
}
}
dd($investor_total_by_id);
//this gives me out put
//
// array:2 [▼
// 1 => 7100.0
// 2 => 444.0
// ]
//** Match Convert Director_id to Director Name. so it will be
// Director1 => 7100
// Director2 => 440
$director_id_name_map = [];
foreach ($director as $value) {
foreach ($investor_total_by_id as $key => $id_value) {
if (key($investor_total_by_id) == $director[$value->id]) {
$director_id_name_map[$directors->name] = $investor_total_by_id[$id_value->amount];
}
}
}
//dd($investor_total_by_id);
dd($$director_id_name_map);
return view('Accounts/Investment/add')
->with('invest_details', $invest_details)
->with('expense_details', $expense_details)
->with('directors', $directors)
->with('investor_total_by_id', $investor_total_by_id)
;
}
看到2 Array的输出
$ investor_total_by_id的输出
array:2 [▼
1 => 7100.0
2 => 444.0
]
输出$导演
Collection {#531 ▼
#items: array:2 [▼
0 => {#533 ▼
+"id": 1
+"name": "Directror1"
+"phone": ""
+"email": ""
+"address": "hi"
+"created_at": "2019-04-18 13:10:04"
+"updated_at": "2019-04-18 07:10:04"
}
1 => {#534 ▼
+"id": 2
+"name": "Director2"
+"phone": ""
+"email": ""
+"address": "hi"
+"created_at": "2019-04-18 14:35:56"
+"updated_at": "2019-04-18 07:10:04"
}
]
}
我希望在Blade中创建一个表格
Director1 7100
Direcot2 440
表格如下
<table border=1>
<th> Director Name </th>
<th> Amount</th>
<td> Director1 <td>
<td>
<td> 7100 </td>
<td> Director2 <td>
<td>
<td> 440 </td>
<table>
好的,基于您的评论,我在下面考虑您的数据库表。
director_name(ID,姓名)
收据(ID,exp_earn_type,量,DIRECTOR_ID)
sum()
获得每个导演的总费用。director_name
表加入前一个子查询,以获取导演名称及其他细节。码:
<?php
$director_expenses = DB::table('receipts')
->join('director_name','receipts.director_id','=','director_name.id')
->select('receipts.director_id', DB::raw('sum(receipts.amount) as total_expense'))
->groupBy('receipts.director_id');
$director_details = DB::table('director_name')
->joinSub($director_expenses, 'director_expenses', function ($join) {
$join->on('director_name.id', '=', 'director_expenses.director_id');
})
->select('director_name.id','director_name.name','director_expenses.total_expense')
->get();
dd($director_details);
你需要遍历director数组,然后在循环的方式,你可以通过在$investor_total_by_id
的帮助下进行握手,然后从下面提取数据来满足director_id
。
<table border="1">
<tr>
<th>Director Name</th>
<th>Amount</th>
</tr>
@foreach ($directors as $key => $value)
<tr>
<td>{{ $value->name }}</td>
<td>{{ $investor_total_by_id[$value->id] }}</td>
</tr>
@endforeach
</table>
编辑
return view('foldername.viewname', compact('directors', 'investor_total_by_id'));
您可以调用上面的视图以及压缩两个数组。
编辑2
$director_id_name_map = [];
foreach ($directors as $key => $value) {
$director_id_name_map[$value] = $investor_total_by_id[$key];
}
通过以上代码,您可以在控制器中映射您的期望。
compact - 创建包含变量及其值的数组