有沒有辦法刪除除數組中最後一個之外的所有重複鍵?

塞爾維斯特

我有從服務器收到的消息數組,其中包含用戶看到的消息的see_by,它的結構:

[1] => Array
    (
        [seen_by] => Array
            (
                [1] => user_1
                [2] => user_2
                [3] => user_3
            )

    )

[2] => Array
    (
        [seen_by] => Array
            (
                [2] => user_2
                [3] => user_3
            )

    )
[3] => Array
    (
        [seen_by] => Array
            (
                [3] => user_3
            )

    )

它們在seen_by數組中的是 user_id,

我想要做的是因為 user_2 已經在第二條消息see_by數組中,所以將它從第一個see_by數組中刪除,並且由於 user_3 在第三條消息的seen_by數組中,從前兩條消息中刪除

我想得到像

[1] => Array
    (
        [seen_by] => Array
            (
                [1] => user_1
            )

    )

[2] => Array
    (
        [seen_by] => Array
            (
                [2] => user_2
            )

    )
[3] => Array
    (
        [seen_by] => Array
            (
                [3] => user_3
            )

    )
nice_dev

使用 foreach 循環和從最後到第一個循環。為此,請使用array_reverse(). 使用 a$set檢查用戶是否已使用 進行跟踪isset如果是,unset則從當前子$set數組或將其添加到並與下一個元素一起移動。一個array_reverse在最後再次做只是為了恢復原來的秩序。

片段:

<?php

function removeDups($data){
    $set = [];
    $res = [];
    foreach(array_reverse($data) as &$sub){
        foreach($sub['seen_by'] as $idx => $val){
            if(isset($set[ $val ])){
                unset($sub['seen_by'][ $idx ]);
            }else{
                $set[ $val ] = true; 
            }
        }
        $res[] = $sub;
    }
    return array_reverse($res);
}

print_r(removeDups($data));

在線演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有沒有辦法找出重複系列中的一個或多個事件是否已被刪除?

Spark on Cassandra:有沒有辦法按分區鍵刪除數據?

刪除重複的行但保留一個沒有唯一列

如何刪除具有多個數組的對像中的重複名稱?

有沒有辦法在powershell中修復[Console]::ReadKey()中的輸入和刪除鍵

有沒有辦法在 Angular 中觸發更改檢測以在刪除元素時更新視圖中的數組?

有沒有辦法從熊貓數據框中刪除自動截斷?

數組的索引項沒有被刪除

如何在沒有別名的情況下在一個命令中刪除除master和develop之外的所有本地分支?

如果值已存在,則取消設置除最後一個子數組之外的所有子數組

有沒有辦法在軟刪除時更新“updatedAt”字段?

有沒有辦法通過react刪除firebase中的集合?

有沒有辦法在使用 Discord 創建角色時刪除權限?

用除最後一個以外的所有項目重新創建數組

Bash如何刪除除一個目錄之外的多個擴展名的所有文件

express js:有沒有辦法將url的所有其餘部分映射為一個參數?

有沒有辦法只用一個數組來編程康威的生命遊戲

秒後從數組中刪除所有內容 \n

刪除表中除系統版本(歷史)表之外的所有數據

如何定義一個數組的自定義 TypeScript 定義,其中除第一個之外的所有元素都是數字

在一個函數中刪除所有二叉搜索樹

有沒有辦法只在 R 的數據框中保留重複的行?

有沒有辦法在java中訪問重複的JPanel的組件?

有沒有辦法從 Java 中的鍊錶中刪除第一次出現的特定對像類型?

有沒有辦法避免重複行

有沒有辦法在另一個地圖函數中使用地圖?

從具有相似元素的元組列表中刪除重複的 3 個值元組

在 MySQL 中最後一次出現子字符串後刪除所有文本

刪除熊貓中一列中至少沒有兩個差異值的組