为了账号安全,请及时绑定邮箱和手机立即绑定

在 PHP 中查找该数组中的值时,通过键删除关联数组

在 PHP 中查找该数组中的值时,通过键删除关联数组

PHP
拉风的咖菲猫 2021-12-03 14:56:59
我有一个现有的多个数组的关联数组。然后我有一个“名称”数组,我需要在前一个数组中找到每个“名称”,并通过键删除该数组。这里的目标是获取现有的文档数组,允许用户“删除”它们,所以我必须比较用户想要删除的文件的名称,然后在我的父数组中取消设置这些数组中的每一个,然后通过将这个最终数组存入数据库以保存为用户的“更新”列表。伪代码将是: - 比较$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); }

);


查看完整回答
反对 回复 2021-12-03
  • 1 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信