簡體   English   中英

有沒有辦法刪除除了數組中的最后一個鍵之外的所有重復鍵?

[英]Is there a way to remove all repeated keys except the last one in array?

我有從服務器收到的消息數組,其中包含用戶看到消息的鍵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 已經在第二條消息的seen_by數組中,所以將其從第一個seen_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
            )

    )

我已經簡化了 arrays 以進行說明,但顯示了這個想法。 您可以從最后開始循環遍歷 arrays 並向后工作,刪除以后 arrays 中存在的元素。

$array = array(
    array( 1, 2, 3 ),
    array( 2, 3 ),
    array( 3 ),
);
$len = count( $array );
for ( $i = $len -1 ; $i > 0; $i-- ) {
    $curr_array = $array[ $i ];
    for( $j = $i - 1; $j >= 0; $j-- ) {
        $array[$j] = array_diff( $array[$j], $curr_array );
    }
}

使用 foreach 循環和從最后到第一個循環。 為此,請使用array_reverse() 使用$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));

在線演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM