我有一个现有的多个数组的关联数组。然后我有一个“名称”数组,我需要在前一个数组中找到每个“名称”,并通过键删除该数组。这里的目标是获取现有的文档数组,允许用户“删除”它们,所以我必须比较用户想要删除的文件的名称,然后在我的父数组中取消设置这些数组中的每一个,然后通过将这个最终数组存入数据库以保存为用户的“更新”列表。伪代码将是: - 比较$names每个名称的数组,查找与数组中的名称匹配的$parentArray键。在 this 中,未设置的数组。name$namesforeach我的多个数组的关联数组在这里:Array([0] => PetManagement\\Pet\\Document Object([file:protected] => https://url.com/file_example_MP3_700KB.mp3[name:protected] => file_example_MP3_700KB.mp3[fileType:protected] => audio/mp3[timestamp:protected] => 2019-08-21 08:28:12[authorID:protected] => 2[extension:protected] =>[extensionIcon:protected] =>)[1] => PetManagement\\Pet\\Document Object([file:protected] => https://url.com/file-sample_100kB.docx[name:protected] => file-sample_100kB.docx[fileType:protected] => application/vnd.openxmlformats-officedocument.wordprocessingml.document[timestamp:protected] => 2019-08-21 08:28:12[authorID:protected] => 2[extension:protected] =>[extensionIcon:protected] =>)[2] => PetManagement\\Pet\\Document Object([file:protected] => https://url.com/file-sample_100kB.odt[name:protected] => file-sample_34343kB.odt[fileType:protected] => application/vnd.oasis.opendocument.text[timestamp:protected] => 2019-08-21 08:28:12[authorID:protected] => 2[extension:protected] =>[extensionIcon:protected] =>))我传入了一个“名称”数组,例如['file-sample_100kB.odt','file_example_MP3_700KB.mp3'],我想搜索这个大数组以删除name键与该数组中的每个值相匹配的键,以及unset键。因此,在我的示例中,使用$names数组,我将删除 key3和 0.我一直在使用的通用代码如下,但我似乎无法让它正常工作:$docs = $p->getDocuments(); //existing $parentArray$docsToRemove = explode(',',$this->postData['documents']); //create array of names we want to remove from $docsforeach ($docsToRemove as $key=>$value) { //$value is the name we want to remove //'name' is the assoc array key we want to remove error_log(print_r(array_search($value, array_column($docs, 'name'))),true); //returns empty array}任何帮助将不胜感激。在此之前,我是做多foreach环,但使用的混合被告知只是array_search()和array_column()会是一个更好更先进的解决方案。
1 回答
潇湘沐
TA贡献1816条经验 获得超6个赞
用这样的回调过滤你的数组:
$docsToRemove = explode(',',$this->postData['documents']); //create array of names we want to remove from $docs
$filtered = array_filter(
$docs,
function ($doc) use ($docsToRemove) { return !in_array($doc->getName(), $docsToRemove); }
);
- 1 回答
- 0 关注
- 147 浏览
添加回答
举报
0/150
提交
取消