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

我有一个现有的多个数组的关联数组。然后我有一个“名称”数组,我需要在前一个数组中找到每个“名称”,并通过键删除该数组。这里的目标是获取现有的文档数组,允许用户“删除”它们,所以我必须比较用户想要删除的文件的名称,然后在我的父数组中取消设置这些数组中的每一个,然后通过将这个最终数组存入数据库以保存为用户的“更新”列表。


伪代码将是: - 比较$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 $docs


foreach ($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()会是一个更好更先进的解决方案。


拉风的咖菲猫
浏览 148回答 1
1回答

潇湘沐

用这样的回调过滤你的数组:$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); });
打开App,查看更多内容
随时随地看视频慕课网APP