функция php bucle array_map - PullRequest
       0

функция php bucle array_map

0 голосов
/ 28 октября 2019

У меня есть этот прайс-лист:

$price_canvas_001 = array_sum(array_map(function ($item) {return in_array(786, $item->product->category_ids)? (4.55 * $item->qty) + 2.45 : 0;},$request->all_items));
$price_canvas_002 = array_sum(array_map(function ($item) {return in_array(787, $item->product->category_ids)? (4.55 * $item->qty) + 2.45 : 0;},$request->all_items));
$price_canvas_003 = array_sum(array_map(function ($item) {return in_array(788, $item->product->category_ids)? (5.55 * $item->qty) + 3.45 : 0;},$request->all_items));
$price_canvas_004 = array_sum(array_map(function ($item) {return in_array(789, $item->product->category_ids)? (5.55 * $item->qty) + 3.45 : 0;},$request->all_items));
$price_canvas_005 = array_sum(array_map(function ($item) {return in_array(790, $item->product->category_ids)? (5.55 * $item->qty) + 3.45 : 0;},$request->all_items));
$price_canvas_006 = array_sum(array_map(function ($item) {return in_array(791, $item->product->category_ids)? (6.00 * $item->qty) + 5.00 : 0;},$request->all_items));
$price_canvas_007 = array_sum(array_map(function ($item) {return in_array(792, $item->product->category_ids)? (6.00 * $item->qty) + 5.00 : 0;},$request->all_items));
$price_canvas_008 = array_sum(array_map(function ($item) {return in_array(793, $item->product->category_ids)? (7.00 * $item->qty) + 6.00 : 0;},$request->all_items));
$price_canvas_009 = $price_canvas_001 + $price_canvas_002 + $price_canvas_003 + $price_canvas_004 + $price_canvas_005 + $price_canvas_006 + $price_canvas_007 + $price_canvas_008;

И я попытался сделать его более эффективным, создав этот цикл:

function granTotal(){
    $category_id = array(786, 787, 788, 789, 790, 791, 792, 793 );
    $increase = array(4.55, 4.55, 5.55, 5.55, 6.55, 6.00, 7.00 );
    $base = array(2.45, 2.45, 3.45, 3.45, 3.45, 5.00, 5.00, 6.00 );
    $length = count($category_id);
    for($i=0; $i<$length; $i++){
        array_sum(array_map(function ($item) {return in_array($category_id[$i], $item->product->category_ids)? ($increase[$i] * $item->qty) + $base[$i] : 0;},$request->all_items));
        $total += category_id[$i];
    }
    return $total;
}


$total = granTotal();
echo $total;

Но он не работает. Пожалуйста, что не так?

1 Ответ

2 голосов
/ 28 октября 2019

У вас есть несколько проблем. Во-первых, у вас есть ряд переменных, которые не входят в область действия, где вы пытаетесь их использовать: $request в granTotal и $category_id, $increase, $base и $i в вашей анонимной функции. Во-вторых, вы фактически не суммируете все результаты ваших звонков на array_sum. Попробуйте это:

function granTotal($request){
    $category_id = array(786, 787, 788, 789, 790, 791, 792, 793 );
    $increase = array(4.55, 4.55, 5.55, 5.55, 6.55, 6.00, 7.00 );
    $base = array(2.45, 2.45, 3.45, 3.45, 3.45, 5.00, 5.00, 6.00 );
    $length = count($category_id);
    $total = 0;
    for($i=0; $i<$length; $i++){
        $total += array_sum(array_map(function ($item) use($category_id, $increase, $base, $i) {
            return in_array($category_id[$i], $item->product->category_ids) ? ($increase[$i] * $item->qty) + $base[$i] : 0; }, 
                            $request->all_items));
    }
    return $total;
}


$total = granTotal($request);
echo $total;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...