簡體   English   中英

多維數組-獲取唯一值,但計算所有重復項

[英]Multidimensional Array - Get unique values, but count all duplicates

我有一個多維數組,我想從中獲取唯一的子值,但是還要計算這些唯一的子值出現了多少次。

例如,這將是我的起始數組:

[0] => Array
        (
            [0] => Array
                (
                    [id] => 1533438473619168
                )
            [1] => Array
                (
                    [id] => 3333333333333333
                )
        )
 [1] => Array
        (
            [0] => Array
                (
                    [id] => 1533438473619168
                )
            [1] => Array
                (
                    [id] => 5555555555555555
                )
        )
 [2] => Array
        (
            [0] => Array
                (
                    [id] => 1533438473619168
                )
            [1] => Array
                (
                    [id] => 77777777777777777
                )
        )

最后,我想要一個看起來像這樣的數組:

[0] => Array
        (
            [0] => Array
                (
                    [id] => 1533438473619168
                    [count] => 3
                )
            [1] => Array
                (
                    [id] => 3333333333333333
                    [count] => 1
                )
            [2] => Array
                (
                    [id] => 5555555555555555
                    [count] => 1
                )
            [3] => Array
                (
                    [id] => 77777777777777777
                    [count] => 1
                )
        )

是否有任何常規/簡便的方法,而無需遍歷每個值的第一個數組,比較/存儲臨時數組中的值,檢查它們並增加計數呢?

為了獲得這種精確格式,您可能需要迭代當前數組並手動進行計數,但是php具有針對這種情況的array_count_values()和array_unique()函數:

http://php.net/manual/zh/function.array-count-values.php

http://php.net/manual/zh/function.array-unique.php

因為您只關心數組的最深值,所以使用array_walk_recursive似乎很適合。 注意,在回調中使用了對輸出數組$counted的引用。

array_walk_recursive($ids, function($id, $k) use (&$counted) {
    $counted[$id] = isset($counted[$id]) ? $counted[$id] + 1 : 1;
});

$counted數組中使用id作為鍵將簡化計數。 其結果將與您建議的輸出有所不同,但我認為它實際上更易於使用。 (例如foreach ($counted as $id => $count) {... )。

$counted = array(
    "1533438473619168" => 3
    "3333333333333333" => 1
    "5555555555555555" => 1
    "77777777777777777" => 1);

暫無
暫無

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

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