Laravel 5.1 - 组合来自输入的数组

Laravel 5.1 - Combining arrays from input

我有一个创建 3 个数组的订单:

我在产品和销售之间有一个名为 Product_Sale 的枢轴 table,它还具有列数量和 line_total。

我努力工作的第一件事是将所有三个数组组合成一个合理的单个数组。以下是我目前拥有的:

    $keys = $request->product_id;
    $quantities = $request->quantity;
    $line_totals = $request->line_total;

    $order = array();

    foreach ($keys as $key => $id) {
            $order[$key] = array(
                'quantity'  => $quantities[$id],
                'line_total' => $line_totals[$id]
            );
    }

    print_r ($order);

我在这里得到一个错误:未定义的偏移量:53

非常感谢任何帮助 - 谢谢!

===更新:

var_dump 个数组:

PRODUCT IDS
array (size=51)
  10 => string '10' (length=2)
  5 => string '5' (length=1)
  53 => string '53' (length=2)
  15 => string '15' (length=2)
  19 => string '19' (length=2)
  39 => string '39' (length=2)
  27 => string '27' (length=2)
  29 => string '29' (length=2)
  48 => string '48' (length=2)
  30 => string '30' (length=2)
  23 => string '23' (length=2)
  43 => string '43' (length=2)
  16 => string '16' (length=2)
  14 => string '14' (length=2)
  36 => string '36' (length=2)
  51 => string '51' (length=2)
  8 => string '8' (length=1)
  25 => string '25' (length=2)
  28 => string '28' (length=2)
  24 => string '24' (length=2)
  22 => string '22' (length=2)
  38 => string '38' (length=2)
  26 => string '26' (length=2)
  49 => string '49' (length=2)
  41 => string '41' (length=2)
  12 => string '12' (length=2)
  31 => string '31' (length=2)
  20 => string '20' (length=2)
  4 => string '4' (length=1)
  6 => string '6' (length=1)
  17 => string '17' (length=2)
  47 => string '47' (length=2)
  44 => string '44' (length=2)
  50 => string '50' (length=2)
  34 => string '34' (length=2)
  7 => string '7' (length=1)
  35 => string '35' (length=2)
  46 => string '46' (length=2)
  40 => string '40' (length=2)
  11 => string '11' (length=2)
  33 => string '33' (length=2)
  21 => string '21' (length=2)
  45 => string '45' (length=2)
  18 => string '18' (length=2)
  42 => string '42' (length=2)
  52 => string '52' (length=2)
  37 => string '37' (length=2)
  32 => string '32' (length=2)
  3 => string '3' (length=1)
  9 => string '9' (length=1)
  13 => string '13' (length=2)

QUANTITIES
array (size=51)
  0 => string '0' (length=1)
  1 => string '0' (length=1)
  2 => string '0' (length=1)
  3 => string '0' (length=1)
  4 => string '0' (length=1)
  5 => string '0' (length=1)
  6 => string '0' (length=1)
  7 => string '0' (length=1)
  8 => string '0' (length=1)
  9 => string '2' (length=1)
  10 => string '2' (length=1)
  11 => string '0' (length=1)
  12 => string '0' (length=1)
  13 => string '0' (length=1)
  14 => string '0' (length=1)
  15 => string '0' (length=1)
  16 => string '0' (length=1)
  17 => string '0' (length=1)
  18 => string '0' (length=1)
  19 => string '0' (length=1)
  20 => string '0' (length=1)
  21 => string '0' (length=1)
  22 => string '0' (length=1)
  23 => string '0' (length=1)
  24 => string '0' (length=1)
  25 => string '0' (length=1)
  26 => string '0' (length=1)
  27 => string '0' (length=1)
  28 => string '0' (length=1)
  29 => string '0' (length=1)
  30 => string '0' (length=1)
  31 => string '0' (length=1)
  32 => string '0' (length=1)
  33 => string '0' (length=1)
  34 => string '0' (length=1)
  35 => string '0' (length=1)
  36 => string '0' (length=1)
  37 => string '0' (length=1)
  38 => string '0' (length=1)
  39 => string '0' (length=1)
  40 => string '0' (length=1)
  41 => string '0' (length=1)
  42 => string '0' (length=1)
  43 => string '0' (length=1)
  44 => string '0' (length=1)
  45 => string '0' (length=1)
  46 => string '0' (length=1)
  47 => string '0' (length=1)
  48 => string '1' (length=1)
  49 => string '0' (length=1)
  50 => string '0' (length=1)

LINE TOTALS
array (size=51)
  0 => string '0.00' (length=4)
  1 => string '0.00' (length=4)
  2 => string '0.00' (length=4)
  3 => string '0.00' (length=4)
  4 => string '0.00' (length=4)
  5 => string '0.00' (length=4)
  6 => string '0.00' (length=4)
  7 => string '0.00' (length=4)
  8 => string '0.00' (length=4)
  9 => string '38.00' (length=5)
  10 => string '42.00' (length=5)
  11 => string '0.00' (length=4)
  12 => string '0.00' (length=4)
  13 => string '0.00' (length=4)
  14 => string '0.00' (length=4)
  15 => string '0.00' (length=4)
  16 => string '0.00' (length=4)
  17 => string '0.00' (length=4)
  18 => string '0.00' (length=4)
  19 => string '0.00' (length=4)
  20 => string '0.00' (length=4)
  21 => string '0.00' (length=4)
  22 => string '0.00' (length=4)
  23 => string '0.00' (length=4)
  24 => string '0.00' (length=4)
  25 => string '0.00' (length=4)
  26 => string '0.00' (length=4)
  27 => string '0.00' (length=4)
  28 => string '0.00' (length=4)
  29 => string '0.00' (length=4)
  30 => string '0.00' (length=4)
  31 => string '0.00' (length=4)
  32 => string '0.00' (length=4)
  33 => string '0.00' (length=4)
  34 => string '0.00' (length=4)
  35 => string '0.00' (length=4)
  36 => string '0.00' (length=4)
  37 => string '0.00' (length=4)
  38 => string '0.00' (length=4)
  39 => string '0.00' (length=4)
  40 => string '0.00' (length=4)
  41 => string '0.00' (length=4)
  42 => string '0.00' (length=4)
  43 => string '0.00' (length=4)
  44 => string '0.00' (length=4)
  45 => string '0.00' (length=4)
  46 => string '0.00' (length=4)
  47 => string '0.00' (length=4)
  48 => string '11.00' (length=5)
  49 => string '0.00' (length=4)
  50 => string '0.00' (length=4)

必须检查数量或行总计中是否存在产品 ID

$keys = $request->product_id;
$quantities = $request->quantity;
$line_totals = $request->line_total;

$order = array();

foreach ($keys as $key => $id) {
   if( in_array($key,$quantities)  && in_array($key,$line_totals) ) {

        $order[$key] = array(
            'quantity'  => $quantities[$key],
            'line_total' => $line_totals[$key]
        );
   }
}

print_r ($order);

好的,我注意到你代码中的一些东西..

首先,产品 ID 数组包含每个项目的匹配键值。这表明 $key$id 出自同一来源并且是同一件事。在这种情况下,您可以放弃 foreach 中的键值。保存一些代码并使其更清晰。 也尽量使用好的变量名; $request->product_id 是单数,但它 returns 是多个数组。更好的叫它$request->product_ids$order = array();.

也是如此

此外,我发现产品 ID 数组没有其他两个数组中列出的所有键。在这种情况下,如果找不到该密钥,您的代码总是会崩溃。最好在为变量赋值之前进行一些检查。

这里有一个保存赋值的方法:

$keys        = $request->product_id;
$quantities  = $request->quantity;
$line_totals = $request->line_total;

$orders = [];

foreach($keys as $key => $id) 
{
    // do we have all the data?
    if( !isset($quantities[ $id ]) || !isset($line_totals[ $id ]) )
    { // nopes.
        // log error or someting about missing key..

        continue; // skip this 'bad' one and try the next.
    }

    // we have all the data, save the order.
    $orders[ $key ] = [
        'quantity'   => $quantities[ $id ],
        'line_total' => $line_totals[ $id ]
    ];
}

希望对您有所帮助!