#php #arrays #laravel #object #highcharts
Вопрос:
Код:
$loans = Loan::select('date_release')
->where('invalid',false)
->where('transaction_year', $transyear)
->get()
->groupBy(function($date) {
return Carbon::parse($date->date_release)->format('m'); // grouping by months
});
$loanmcount = [];
$loanArr = [];
foreach ($loans as $key => $value) {
$loanmcount[(int)$key] = count($value);
}
for($i = 1; $i <= 12; $i ){
if(!empty($loanmcount[$i])){
$loanArr[$i] = $loanmcount[$i];
}else{
$loanArr[$i] = 0;
}
}
$loanTypeCount = Loan::select(['loan_type AS name', DB::raw('count(loan_type) AS y')])
->groupBy('loan_type')
->orderBy(DB::raw('y'), 'desc')
->where('transaction_year', $transyear)
->where('invalid', false)
->get();
$loanTypeCount->map(function($loan)use($loanArr) {
$loan->data = $loanArr;
return $loan;
})
Выход:
var_dump(json_encode($loanTypeCount));
string(433) "[{"name":"Salary","y":"6","data":{"1":0,"2":0,"3":0,"4":0,"5":2,"6":1,"7":3,"8":1,"9":1,"10":0,"11":0,"12":0}},{"name":"Emergency","y":"1","data":{"1":0,"2":0,"3":0,"4":0,"5":2,"6":1,"7":3,"8":1,"9":1,"10":0,"11":0,"12":0}}]"
Месяцы были представлены числами вместо названия месяца. Кроме того, формат не в виде массива, как показано ниже.
Желаемый Результат:
[
{
name: "Salary",
y: "1",
data: [
[
"January",
0.1
],
[
"February",
1.3
],
]
},
{
name: "Emergency",
y: "2",
data: [
[
"March",
0.1
],
[
"April",
1.3
],
]
}
]
Каково решение для этого? Не могу этого понять. Пожалуйста, помогите. Спасибо.
Ответ №1:
в PHP функция имеет закрытую область ,поэтому вы не можете получить доступ к переменной обычно внутри функции.вы должны вручную передать его в функцию try:
$loanTypeCount->map(function ($loan) use ($loanArr) {
$loan->data = $loanArr;
return $loan;
});
Комментарии:
1. Я отредактировал свой вопрос, чтобы было ясно, ошибка исчезла, но формат данных не соответствует желаемому результату.
2. Я отредактировал решение ,вам нужен ответ в виде массива, но вы делаете его ассоциативным массивом, который является объектом в формате json, а не массивом
3. В этой строке написано Неопределенное смещение: 1: array_push($loanArr,массив($loanArr[$i],0));
4. извините за это ,не могли бы вы показать мне, как
$loanmcount
выглядит5. массив(5) { [9]=> int(1) [5]=>> int(2) [6]=>>> инт(1) [7]=>>>> инт(3) [8]=>>>>> int(1) }