从多维数组中删除数组的最有效方法[重复]
Posted
技术标签:
【中文标题】从多维数组中删除数组的最有效方法[重复]【英文标题】:Most efficient way to remove array from multidimensional array [duplicate] 【发布时间】:2019-07-31 06:29:48 【问题描述】:考虑这个数组:
$userBookmarks = [
[
"id": 10000,
"dateAdded": 1552127606
],
[
"id": 20000,
"dateAdded": 1552127610
],
[
"id": 30000,
"dateAdded": 1552127614
]
]
假设我知道 ID 是 10000,并且我想删除 id
的值为 10000 的子数组,那么最有效的方法是什么,以便我可以删除整个子数组并留下这个:
$userBookmarks = [
[
"id": 20000,
"dateAdded": 1552127610
],
[
"id": 30000,
"dateAdded": 1552127614
]
]
我的“最近”尝试:
for( $i = 0; $i < count( $userBookmarks ); $i++ )
$currentBookmark = $userBookmarks[ $i ];
if( $currentBookmark['id'] == $newBookmarkID )
unset( $currentBookmark );
break;
else
$userBookmarks[] = $newBookmark;
但它真的什么都没做......
【问题讨论】:
您需要遍历每个数组元素并检查是否 id = x 然后删除该元素。它是 O(n) 且高效的。 是的,id
值是唯一的。我确实尝试了一些使用循环和unset
的东西,但我对数组非常陌生,无法使其工作。我也进行了研究,但所有问题似乎都是关于删除数组中的元素,而不是数组本身。
【参考方案1】:
解决起来很简单。
你需要unset()
子数组的原始引用。
变化:
unset( $currentBookmark );
到:
unset( $userBookmarks[ $i ] );
“功能性”替代方案如下所示:
$userBookmarks = [
["id" => 10000, "dateAdded" => 1552127606],
["id" => 20000, "dateAdded" => 1552127610],
["id" => 30000, "dateAdded" => 1552127614]
];
$newBookmarkID = 10000;
$userBookmarks = array_filter($userBookmarks, function ($v) use ($newBookmarkID)
return $v['id'] != $newBookmarkID;
);
var_export($userBookmarks);
演示:https://3v4l.org/uhDB2
【讨论】:
以上是关于从多维数组中删除数组的最有效方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章