如何在laravel中将两个数组值相乘而没有循环

时间:2018-12-14 05:53:12

标签: laravel array-map

我尝试将$qty_test $get_ltr相乘,也就是数据类型是整数,但这给了我错误

  

不受支持的操作数类型

代码中发布的内容。

$qty_test=explode(",",$request->input('qty'));

foreach ($part_id as $part_ids) {
     $get_ltr = part::where('status',1)->where('part_no',$part_ids)->first();
     $ltr[] = $get_ltr->ltr;
     $total_ltr= $qty_test * $ltr; 
}

给我一​​个错误,如何乘以它,请帮助我。

6 个答案:

答案 0 :(得分:0)

您应该尝试以下操作:

$total_ltr = array_map(function () {
    return array_sum(func_get_args());
}, $qty_test, $get_ltr->ltr);

答案 1 :(得分:0)

获取所有行乘法

$qty_test=explode(",",$request->input('qty'));

foreach ($part_id as $part_ids) {
     $get_ltr = part::where('status',1)->where('part_no',$part_ids)->first();
     $ltr = $get_ltr->ltr;
     $total_ltr[]= $qty_test * $ltr; 
}
print_r($total_ltr);

答案 2 :(得分:0)

使用explode()后,您会忘记$ qty_test具有数组值。因此,您必须使用array_sum()对所有$ qty_test数组求和并将其乘以各自的值。

尝试

$qty_test=explode(",",$request->input('qty'));

foreach ($part_id as $part_ids) {
   $get_ltr = part::where('status',1)->where('part_no',$part_ids)->first();
   $ltr[] = $get_ltr->ltr;
}

$total_ltr= array_sum($qty_test) * array_sum($ltr); 
echo $total_ltr;

希望这对您有帮助

答案 3 :(得分:0)

您需要在此处使用array_sum方法

  

两个数组的总和的第一个看起来像这样。

例如

$arrayOne = [5,10,15];    //total is 30
$arrayTwo = [5,10];       //total is 15  
$sumOfTwoArray = array_sum($arrayOne) * array_sum($arrayTwo); 
  

输出为(30 * 15):450

现在在您的代码中进行修改

$qty_test=explode(",",$request->input('qty'));

foreach ($part_id as $part_ids) {
     $get_ltr = part::where('status',1)->where('part_no',$part_ids)->first();
     $ltr[] = $get_ltr->ltr;
 }
$total_ltr= array_sum($qty_test) * array_sum($ltr);  //used array_sum method here in both array

仅获得每行qty和ltr的乘积,然后像这样使用

 $array = [5,10,15];
 $ltr = ['5','10'];

 $array1 =  array_map(function ($v) use ($array) {
           info("v ;- ".$v);
         return array_map(function ($a) use ($v){
                info("a :- ".$a." v :- ".$v);
                return   $a * $v;
          },$array);
  },$ltr);

  //info("total is :- ".print_r($array1,true));

答案 4 :(得分:0)

#1 -如果要获取每个值的每个乘法,请遵循以下代码:

$qty_test=explode(",",$request->input('qty'));

$ltr = [];
foreach ($part_id as $part_ids) {

   $get_ltr = part::where('status',1)->where('part_no',$part_ids)->first();

   array_push($ltr, $get_ltr->ltr);

}

$total_ltr = [];
foreach($qty_test as $i=>$val){
    array_push($total_ltr, $qty_test[$i] * $ltr[$i]);
}

....

....

#2 -但是,如果要对first array中的所有值求和并将其与second array中的值总和相乘,请遵循以下代码:

$qty_test=explode(",",$request->input('qty'));

$ltr = [];
foreach ($part_id as $part_ids) {

   $get_ltr = part::where('status',1)->where('part_no',$part_ids)->first();

   array_push($ltr, $get_ltr->ltr);

}

$total_ltr= array_sum($qty_test) * array_sum($ltr); 

array_sum()将对数组中的所有值求和,例如

echo array_sum([23,14,45]);

// will return 82 (23 + 14 + 45)

有关更多详细信息,您可以参考关于array_sum()的{​​{3}}

答案 5 :(得分:0)

很抱歉,不久前我的答复很晚,我遇到了将数组中所有值都乘以多个的情况,最后创建了函数

例如;

$multiplicationArrays = ['10','10','50'];

是我的数组

我的预期结果是5000

所以我已经创建了函数

function multiplyArray($numbersArray='')
    {
        //defining the error messages
        $errorMessage = "Minimum Two Numbers is required";
        //check if atleast two numbers in array
        $isMultiplicable = count($numbersArray);
        if ($isMultiplicable < 2 ) 
        {
            //if fails return the errormessage
           return $errorMessage;
        }
        else
        {
            //initializing the resilt as one for the first time
            $result = 1;
           foreach ($numbersArray as $numbersArray)
            {
                //on the each multiple an store it in the result varialbe
                $result *= $numbersArray;
            }
            //return the result
            return $result;
        }
    }

并最终在函数内部传递数组

echo multiplyArray($multiplicationArrays);

结果将与预期的5000

希望有帮助