在laravel中以1个数组发送2个值

时间:2019-01-12 17:36:14

标签: php arrays laravel

我有2个数据数组,我需要将这两个数组的结果相加。

我可以使用array_combine,但是有两个问题:

  1. 我的第一个数组来自复选框,仅发送已选中复选框的数据
  2. 第二个数组来自输入字段并发送所有输入

这里的问题是我的第一个数组具有(例如)3个值,而我的第二个数组具有7个值

这种组合将返回以下错误:

array_combine(): Both parameters should have an equal number of elements

数据

这是我的dd结果:

  "optionID" => array:3 [▼ //check-box values
    0 => "1"
    1 => "2"
    2 => "11"
  ]
  "optionPRICE" => array:8 [▼ //input values
    0 => "98"
    1 => null
    2 => null
    3 => null
    4 => null
    5 => null
    6 => null
    7 => null
  ]

我想要什么

我正在寻找的是从选中的复选框中获取输入值,而不是其余部分。

示例我检查数据1,2,3,我得到的值1,2,3是否是null的{​​{1}},而没有得到dd数据中的4,5,6,7以上。

代码

这是我的html的样子

filled

我正在获取这2种类型的数据

<tr> <td class="text-center" width="50"> <label class="switch switch-small"> <input type="checkbox" name="optionID[]" value="11"> //checkbox arrays <span></span> </label> </td> <td> CDN </td> <td class="text-center"> //input arrays <input class="form-control" type="number" name="optionPRICE[]"> </td> </tr>

this

"optionID" => array:3 [▼ //check-box values 0 => "1" 1 => "2" 2 => "11" ] "optionPRICE" => array:8 [▼ //input values 0 => "98" 1 => null 2 => null ]

or this

有什么主意吗?

更新

根据答案,如果我使用映射函数返回数据是我的第二个示例期望,那么将其命名为数据并将它们与我的模型列相关联会造成混淆,因此我共享我的模型名称并解释哪些数据必须放在哪个列中为了保存在正确的位置。

"optionID" => array:3 [▼ "array" => array:2 [ 0 => "1", 1 => "98", ], "array" => array:2 [ 0 => "2", 1 => null, ], "array" => array:2[ 0 => "11", 1 => null, ], ]

Schema

Schema::create('product_options', function (Blueprint $table) { $table->increments('id'); $table->integer('product_id')->nullable()->unsigned(); $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade'); $table->integer('option_id')->nullable()->unsigned(); $table->foreign('option_id')->references('id')->on('options')->onDelete('cascade'); $table->string('price')->nullable(); }); 数据必须进入optionID列,而option_id数据必须进入optionPRICE列。

对于product_id列,因为此数据将在保存我的产品后保存,因此我只需通过price即可获得该列已存在的ID。

更新2

我尝试了许多不同的条件,以根据我得到的答案来看数据如何在这里发送是一个严重的问题。

当我从1个选定的选项传递数据时,$product->id选择颜色并填充一些数据以按预期方式发送。

但是当我选择第二个选项e.g.时选择此选项的 sizes ,只有复选框ID会发送,而e.g.的数据不会发送,此问题适用于下一个选项,因为好(选项3,4,5,6 ....)

  

以下是示例:

optionPRICE

更新3

好的,我变通了,测试了一些解决问题的方法,这就是我所想的和所取得的成就:

  1. 返回我的第三个价格为null(更新2)的问题是因为我们要计算价格数组,而不是检查复选框的输入。这就是为什么当我的实际填充选项为11时,第3个选项为null的原因。(请参阅我的问题的数据dd)
  2. 我现在可以获取实际填充的array:3 [▼ 0 => array:3 [▼ //this is from colors (included price) "option_id" => "4" "price" => "768" "product_id" => 50 ] 1 => array:3 [▼ //this is also from colors (included price) "option_id" => "5" "price" => "5467" "product_id" => 50 ] 2 => array:3 [▼ //this one is from sizes (not included price, while i filled the price!) "option_id" => "10" "price" => null "product_id" => 50 ] ] 字段,而不是通过对它们进行计数,而是使用值。

这是我到目前为止所做的:

optionPRICE
上面的

代码返回以下内容:

$options = $request->input('optionID');
$prices = $request->input('optionPRICE');
$collection = array_filter($prices, function($value) {
  return !is_null($value);
});
$toInsert = array_merge([$options, $collection]);
dd($toInsert);

但是如果我仅填写我的两个复选框的价格,就会像这样:

array:2 [▼
  0 => array:3 [▼
    0 => "4"
    1 => "5"
    2 => "10"
  ]
  1 => array:3 [▼
    0 => "768"
    1 => "5467"
    5 => "5465496"
  ]
]

这很好,仅获取输入数据,而无需仅对数组元素进行纯值计数。

此后,我需要加入我的2个数组,并在发生第二种情况(3个复选框,2个价格)的情况下返回null。

有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

这应该使用array_slice为您提供第一个所需的解决方案:

// Get the length of the smaller array
$minLength = min(count($arr1), count($arr2));

$result = [
    'optionID' => array_slice($arr1, 0, $minLength),
    'optionPRICE' => array_slice($arr2, 0, $minLength),
];

答案 1 :(得分:0)

对于第二个理想的解决方案,您可以尝试执行以下操作(如果我理解正确的话):

$checkboxes = [1, 2, 11]; 
$inputs = [98, null, null]; 

$result = collect($checkboxes)->map(function ($item, $key) use($inputs) {
    return [$item, $inputs[$key] ?? null]; 
})->toArray();

dd($result);

// array:3 [
//   0 => array:2 [
//     0 => 1
//     1 => 98
//   ]
//   1 => array:2 [
//     0 => 2
//     1 => null
//   ]
//   2 => array:2 [
//     0 => 11
//     1 => null
//   ]
// ]