合并两个关联数组为一个数组MongoDB Laravel 7



最终目标:

  • 获取旧数组(repository_data)及其子数组。
  • 在repository_data数组中插入$newData数组
  • 合并repository_data数组与newData数组!

我有一个文件在我的MongoDB,我创建(也许它需要修复?)

当我运行查询时,结果如下:

#attributes: array: 4[
▼"_id"=>MongoDBBSONObjectId{
#1292▶
}"team_data"=>array: 2[
▼"team_id"=>"94""repository_data"=>array: 1[
▼0=>array: 4[
▼"repository_id"=>2"repository"=>"DataSomething""token"=>"notoken1""url"=>"nourl1"
]
]
]"updated_at"=>MongoDBBSONUTCDateTime{
#1293▼+"milliseconds": "1614177748010"
}"created_at"=>MongoDBBSONUTCDateTime{
#1294▼+"milliseconds": "1614177748010"
}
]

我感兴趣的是这里存储的值:

team_data [' repository_data ']

我想做的是创建一个新的MongoDB记录,它将具有相同的格式,但将在"repository_data"中添加另一个数组。

第一次提交的数据是:

array:1 [▼
0 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "ssxc"
"url" => "qwe3"
]
]

这就是我的问题发挥作用的地方:→我如何创建一个数组,将容纳我的新数组和旧的(一个多维数组)?

就像把它们合并成一个包含关联数组的大数组…

-repository_data =>
--[0]RepoData => [Things...]
--[1]RepoData => [Same key things different values]
--[N]RepoData

我想遍历旧数组()Array_merge不是解决方案

我的新值存储在以下数组值中:

$newData = array(
'repository_id' => $repositoryID,
'repository' => $request->repository,
'token' => $request->dataverse_token,
'url' => $request->dataverse_url,
);

我想到了这个:

$newData = [
"repository_id" => $repositoryID,
"repository" => $request->repository,
"token" => $request->dataverse_token,
"url" => $request->dataverse_url,
];
$oldData = $collection->team_data['repository_data'];
$arrayPot = array();
foreach ($oldData as $od) {
$oldDataNew= $arrayPot + $od;
}

结果如下:

array:2 [▼
0 => array:4 [▼
"repository_id" => 2
"repository" => "WiiVerse"
"token" => "sample1"
"url" => "sample1.com"
]
1 => array:4 [▼
"repository_id" => 2
"repository" => "WiiVerse"
"token" => "sample2"
"url" => "sample2.com"
]
]

错误,因为其中一个数组成为olddatnew上的子数组(意味着它们属于team_data['repository_data'][0])。) .

当请求team_data['repository_data']时,我想要以下输出:

array: 5[
▼0=>array: 4[
"repository_id"=>2"repository"=>"wii""token"=>"SomethingElse""url"=>"SE1"
▼1=>array: 4[
"repository_id"=>2"repository"=>"wii""token"=>"ssxc""url"=>"SE1"
]

这将合并两个数组在一起(理论上?)但是第二个变量的数据将只被存储:

dd(array(($newData)+($oldDataNew)));

这确实有效(在某种程度上),如上面的代码所示:

dd($oldDataNew[]=array(($newData),($oldDataNew)));

问题是,当用户试图输入另一个值时(在提交表单时),将执行相同的代码。每个旧值都存储在一个大数组中,新值不会插入到该数组中,这是一个问题。

看第三次插入(注意两个旧数组现在是子数组)

0 => array:5 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "kkkkk"
"url" => "llll"
0 => array:2 [▼
0 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "5467"
"url" => "rtf"
]
1 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "kkkkk"
"url" => "llll"
]
]
]

做以下事情:

dd($submissionData[]=$oldDataNew+$newData);

结果:

0 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "5467"
"url" => "rtf"
]

可以看到,丢失了一个数组,只存储了一个数组。为什么?因为它们拥有相同的键值?

(我认为)我更接近于组合这些数组(旧的和新的)是通过这个:

$batman = $oldData  + $newData;

$oldData有如下值(例如):

array:2 [▼
0 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "123sdws"
"url" => "123"
]
1 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "fff"
"url" => "vvv"
]
]

$oldData + $newData将得到:

array:2 [▼
0 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "123sdws"
"url" => "123"
]
1 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "fff"
"url" => "vvv"
]
]

执行如下命令:

foreach (($newData) as $nd){
$oldData= $oldData+ ($nd);
}

将导致:

array:6 [▼
0 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "123sdws"
"url" => "123"
]
1 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "fff"
"url" => "vvv"
]
"repository_id" => 2
"repository" => "dataverse"
"token" => "kkkk"
"url" => "llll"
]

我太天真了:

foreach (($newData) as $nd) {
$arrayPot = array_merge($oldData, array($nd));
}

其中$newData为:

$newData = array([
"repository_id" => $repositoryID,
"repository" => $request->repository,
"token" => $request->dataverse_token,
"url" => $request->dataverse_url,
]);

和$oldData保存repository_data

之前所有记录的值我的循环结果如下:

"repository_data" => array:4 [▼
0 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "123sdws"
"url" => "123"
]
1 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "kkkk"
"url" => "3333"
]
2 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "4444"
"url" => "5555555555"
]
3 => array:4 [▼
"repository_id" => 2
"repository" => "dataverse"
"token" => "1111"
"url" => "22333"
]
]

我仍然不明白$newData必须是一个数组,然后再次在我的foreach循环

中声明它为数组

最新更新