php - 将两个数组合二为一
问题描述
嗨有问题合并数组
我的第一个数组是产品选项
第二个数组是产品变化
我需要复制我的选项数组值,而值数量等于第二个数组的值数量。
例如:
$inputs = ["Red-S-Cotton", "Blue-Silk-M"];
$keys = ['Color-Size-Material', 'Color-Material-Size'];
在这个数组中的值等于 2 = 2 但是我的 $keys 数组只有一个值
$key = ['Color-Size-Material'];
当我尝试合并它们时,我得到错误,因为不相等。
我的数组值和值名称是可变的并且是随机获取的。我的代码如下所示:
function make_combinations($props)
{
if ( empty($props) ) return [];
$keys = array_keys($props);
$key = $keys[0];
$values = $props[$key];
unset($props[$key]);
$rest = make_combinations($props);
if ( empty($values) ) return $rest;
if ( empty($rest) ) return $values;
$combinations = [];
foreach($rest as $comb)
{
foreach($values as $value)
{
$combinations[] = $value . '-' . $comb;
}
}
return $combinations;
}
$inputs = explode(',', $request['option']);
$props = [];
foreach($inputs as $input)
{
$input_key = strtolower($input);
if ( !$request->has($input_key) ) continue;
$input_values = explode(',', $request->input($input_key));
$props[$input_key] = $input_values;
}
$combinations = make_combinations($props);
$as = array(implode('-', $inputs));
$inpu = $combinations;
$keys =$as;
$say = count($inpu);
$say2 = count($keys);
if($say2 < $say) {
$output = array_map(function ($key) use ($inpu, $keys) {
$expKeys = explode('-', $keys[$key]);
$expInputs = explode('-', $inpu[$key]);
return array_combine($expKeys, $expInputs);
}, array_keys($inpu));
dd($output);
}else{
$output = array_map(function ($key) use ($inpu, $keys) {
$expKeys = explode('-', $keys[$key]);
$expInputs = explode('-', $inpu[$key]);
return array_combine($expKeys, $expInputs);
}, array_keys($inpu));
dd($output);
}
$result[] = compact('combinations', 'inputs');
return view('system.modules.variants', compact('result'));
}
我的第一个数组的输出是:
array:1 [
0 => "Color-Size"
]
第二个数组的输出是:
array:2 [
0 => "Red-S"
1 => "Blue-S"
]
第一个数组可能是 Color-Size-Material-Type.... 第二个数组可能是 Red-SA-Cotton... 请帮帮我
我需要这样的输出:
array:2 [
0 => array:2 [
"Color" => "Red"
"Size" => "S"
]
1 => array:2 [
"Color" => "Blue"
"Size" => "S"
]
]
解决方案
只需使用array_combine()
-
array_combine — 通过使用一个数组作为键和另一个作为其值来创建一个数组
例子:
$toBeKeys = ['color', 'size'];
$toBeValues = ['green', 'M'];
$array = array_combine($toBeKeys, $toBeValues);
echo '<pre>'. print_r($array, 1) .'</pre>';
# will output
# Array => [
# 'color' => 'green',
# 'size' => 'M'
# ]
编辑:
$input = ['red-s', 'blue-m'];
$keys = ['color', 'size'];
foreach ($input as $el)
{
$attr = explode('-', $el);
$combined = array_combine($keys, $attr);
echo '<pre>'. print_r($array, 1) .'</pre>';
}
推荐阅读
- c# - 如何查看我的 Xamarin.Forms 应用程序是否在 Visual Studio 中的 Android 6(或更高版本)上运行或/和可运行?
- netflix-zuul - 是否可以将 Netflix Zuul 中的响应的最大标头大小从 8KB 增加到 32KB?
- powershell - kakfa本地shell窗口关闭时间
- python - 获取当前会话的用户名
- ios - Plists 不再是标准做法了吗?
- javascript - 使用固定时间字符串获取当前日期 - 时刻 js
- python - 父进程中断时如何完成子进程的工作?
- c++ - 使用 cpprestdk 的 C++ HTTP 请求总是异常。没有为 cpprest142_2_10d.dll 加载符号
- vue.js - vue组件库的正确使用方法是什么?
- monitoring - 有没有办法在 PromQL 中进行类似查询的“左外连接”?