我有2个数组,两个数组都有共同点,就是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个数组的输出
$ investor_total_by_id的输出
array:2 [▼
1 => 7100.0
2 => 444.0
]
输出$ director
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>
答案 0 :(得分:2)
您需要遍历Directors数组,然后在循环的方式上,可以借助$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'));
您可以像上面一样调用view并压缩两个数组。
编辑2
$director_id_name_map = [];
foreach ($directors as $key => $value) {
$director_id_name_map[$value] = $investor_total_by_id[$key];
}
通过上述代码,您可以在控制器中映射您的期望。
compact-创建包含变量及其值的数组
答案 1 :(得分:2)
好的,因此根据您的评论,我在下面考虑将其作为您的数据库表。
director_name(id,name)
收据(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);