【问题标题】: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 的东西,但我对数组非常陌生,无法使其工作。我也进行了研究,但所有问题似乎都是关于删除数组中的元素,而不是数组本身。

标签: php arrays


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 2021-05-19
    • 2013-05-10
    • 2022-01-22
    • 2019-09-04
    • 2010-12-04
    • 2019-06-10
    • 2018-07-26
    相关资源
    最近更新 更多