PHP-将相同长度的数组合并为关联数组
我正在尝试动态合并多个阵列。考虑以下三种不同的阵列输入:PHP-将相同长度的数组合并为关联数组,php,arrays,Php,Arrays,我正在尝试动态合并多个阵列。考虑以下三种不同的阵列输入: { "container_id": [ { "key_0": "NYKU3922051" }, { "key_0": "LACU3922051" } ], "out_ref": [ { "key_0": "CI84621" }, { "key_0": "DI1000" } ], "in_ref2":
{
"container_id": [
{
"key_0": "NYKU3922051"
},
{
"key_0": "LACU3922051"
}
],
"out_ref": [
{
"key_0": "CI84621"
},
{
"key_0": "DI1000"
}
],
"in_ref2": [
{
"key_0": "555-1106260-024"
},
{
"key_0": "898-1106260-024"
}
]
}
我正在尝试将以上三个数组动态合并为一个关联数组,如下所示:
{
"array_one": {
"key_0": "NYKU3922051",
"key_0": "CI84621",
"key_0": "555-1106260-024"
},
"array_two": {
"key_0": "LACU3922051",
"key_0": "DI1000",
"key_0": "898-1106260-024"
}
}
我们在上面看到的是,每个数组的第一项合并到一个新数组中
我不太清楚该从哪里开始,因为我真的不知道该从哪里开始
这是我的PHP:
$arrays = $request->all();
$newArray = [];
foreach ($arrays as $key => $value) {
//???
}
编辑
如果不可能,新数组不一定需要使用相同的键 您最好的选择是跳过“key_0”并得到如下结果:
array(2) {
["array_one"]=>
array(3) {
[0]=>
string(11) "NYKU3922051"
[1]=>
string(7) "CI84621"
[2]=>
string(15) "555-1106260-024"
}
["array_two"]=>
array(3) {
[0]=>
string(11) "LACU3922051"
[1]=>
string(6) "DI1000"
[2]=>
string(15) "898-1106260-024"
}
}
通过使用此代码,循环并将值分隔到两个数组
$arr = json_decode($str,true);
foreach($arr as $sub){
$new["array_one"][] = $sub[0]["key_0"];
$new["array_two"][] = $sub[1]["key_0"];
}
var_dump($new);
可处理任意数量子阵列的动态版本。
我添加了一个计数器,它可以向上计数并跟踪将值放入哪个数组
$i = 1;
foreach($arr as $sub){
foreach($sub as $val){
$new["array_" . $i][] = $val["key_0"];
$i++;
}
$i = 1;
}
var_dump($new);
结果:
array(3) {
["array_1"]=>
array(3) {
[0]=>
string(11) "NYKU3922051"
[1]=>
string(7) "CI84621"
[2]=>
string(15) "555-1106260-024"
}
["array_2"]=>
array(3) {
[0]=>
string(11) "LACU3922051"
[1]=>
string(6) "DI1000"
[2]=>
string(15) "898-1106260-024"
}
["array_3"]=>
array(3) {
[0]=>
string(9) "something"
[1]=>
string(4) "else"
[2]=>
string(4) "here"
}
}
试试这样的方法
$arrays = $request->all();
$result = [];
foreach ($arrays as $array) {
foreach ($array as $key_index => $keyObject) {
if(!isset($result['array'.$key_index])) {
$result['array'.$key_index] = ['key_0' => $keyObject['key_0']];
} else {
$result['array'.$key_index]['key_'.count($result['array'.$key_index])] = $keyObject['key_0'];
}
}
}
部件$keyObject['key\u 0']
可以更改为更具动态性。仅使用一个元素获取关联数组中的值的方法
你会得到这样的结果
array(2) {
["array0"]=>
array(3) {
["key_0"]=>
string(11) "NYKU3922051"
["key_1"]=>
string(7) "CI84621"
["key_2"]=>
string(15) "555-1106260-024"
}
["array1"]=>
array(3) {
["key_0"]=>
string(11) "LACU3922051"
["key_1"]=>
string(6) "DI1000"
["key_2"]=>
string(15) "898-1106260-024"
}
}
为什么不能这样构造数组,这是一个有助于数组遍历和
@Yoshi-好的,他们不一定需要使用键
键0
。它也可以是:键0
,键1
,键2
键不能重复,只能是值be@oliverbj所以你可以用数字索引数组而不是关联数组?但是如果有“数组三”和四呢?在本例中,有两个数组,因为每个数组都给出了两个值。但如果它们有三个或四个值,那么我需要动态添加更多值arrays@oliverbj我添加了一个动态版本!动态版本是完美的-它解决了我的问题!我不控制输入数组。真的不确定这是否是一个答案?@oliverbj在这种情况下,您的预期输出是不可能的,因为在PHP中数组键必须是唯一的。正如所说的,我不关心键是否具有动态名称,如“key_0”、“key_1”等@oliverbj那么为什么您需要关联数组中的键,只需忽略它们并使用数字数组即可避免值覆盖
{
"array_one": {
"key_0": {
0 : "NYKU3922051",
1 : "CI84621",
2 : "555-1106260-024"
}
},
"array_two": {
"key_0": {
0 : "LACU3922051",
1 : "DI1000",
2 : "898-1106260-024"
}
}