最终目标:
- 获取旧数组(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循环
中声明它为数组