Laravel: получить процент от каждого значения в массиве
У меня есть два массива переменных с числами. Мне нужен третий, который также будет массивом, но с процентом первых двух массивов. Например:
array:15 [▼
0 => 256
1 => 312
2 => 114
]
array:15 [▼
0 => 100
1 => 211
2 => 12
]
Поэтому мне нужна переменная, чтобы выглядеть так:
array:15 [▼
0 => 39.0
1 => 67.6
2 => 10.5
]
Первые две переменные я получаю так:
$settlements = Settlement::where('town_id', Auth::user()->town_id)
->withCount('members')
->where('reon_id', '1')
->get();
foreach ($settlements as $settlement) {
$sett[] = $settlement->members->count();
}
$sett_members = Settlement::where('town_id', Auth::user()->town_id)
->withCount('members')
->where('reon_id', '1')
->get();
foreach ($sett_members as $sett_member) {
$sett_m[] = $sett_member->members->where('cipher_id', '0')->count();
}
Но когда я пытаюсь вычислить процент вот так:
$percentage = round(($sett_m / $sett) * 100,1);
Он показывает ошибку неподдерживаемые типы операндов
2 ответа:
Вы можете
loop
через Ваш массив, сделатьcalculation
с элементомsame index
и хранить в массивеnew
.$percentage = array(); for($i=0;$i<count($sett_m);$i++) { if($sett[$i]!=0){ $percentage[$i] = round(($sett_m[$i] / $sett[$i]) * 100, 1); } } print_r($percentage);
Согласно документации операторов массива, доступной в php
Http://php.net/manual/en/language.operators.array.php ,
В массиве можно использовать только следующие операторы,
- Союз
- равенство
- идентичность
- неравенство
- Неидентичность
Для вашего случая, вы можете сделать это, как,
Если у вас есть массивы типа
$arr1
и$arr2
, то$arr1 = array(0 => 256, 1 => 312,2 => 114); $arr2 = array(0 => 100,1 => 211,2 => 12); $calculator = function($first, $second) { if($second == 0) return 0; else return round($first/$second * 100,2); }; $percentage = array_map($calculator, $arr2, $arr1);
Здесь вы получите
$percentage
массив как желаемый результат.