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 3

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 ,

В массиве можно использовать только следующие операторы,

  1. Союз
  2. равенство
  3. идентичность
  4. неравенство
  5. Неидентичность

Для вашего случая, вы можете сделать это, как,

Если у вас есть массивы типа $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 массив как желаемый результат.