我有從服務器收到的消息數組,其中包含用戶看到的消息的鍵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
)
)
使用 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] 删除。
我来说两句