簡體   English   中英

如何將Array Key名稱與另一個Array Key名稱匹配

[英]How to match Array Key name with another Array Key name

我有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數組,然后在循環的方式,你可以通過在director_id的幫助下進行握手,然后從下面提取數據來滿足$investor_total_by_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 - 創建包含變量及其值的數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM