當前位置: 首頁> 最新文章列表> array_count_values() 參數必須是一維數組嗎?

array_count_values() 參數必須是一維數組嗎?

M66 2025-06-07

在PHP 中, array_count_values()函數是一個非常有用的函數,它可以統計數組中每個值出現的次數。該函數的定義如下:

 array_count_values(array $array): array

1. array_count_values()函數簡介

array_count_values()函數的主要作用是返回一個關聯數組,其中包含原數組中的所有值,以及每個值出現的次數。例如:

 $array = array(1, 2, 2, 3, 3, 3, 4);
$result = array_count_values($array);
print_r($result);

輸出結果將是:

 Array
(
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 1
)

2. array_count_values()只能用於一維數組嗎?

嚴格來說, array_count_values()函數是針對一維數組設計的,因此它會遍歷一維數組中的元素,並統計每個值出現的次數。如果傳入的是一維數組,它能夠按預期工作並返回一個計數結果。

然而,當我們傳入一個多維數組時, array_count_values()會僅考慮數組的最外層(第一層)元素,而忽略嵌套在內層的數組。如果數組包含的是多維數組或者其他復雜數據結構, array_count_values()將不會對其進行遞歸處理。

3. 如果傳入多維數組會怎樣?

讓我們看一個例子:

 $array = array(
    'a' => 1,
    'b' => 2,
    'c' => array(1, 2),
    'd' => 3,
);

$result = array_count_values($array);
print_r($result);

輸出將是:

 Array
(
    [1] => 1
    [2] => 1
    [3] => 1
)

可以看到, array_count_values()僅對最外層的元素進行了計數,而忽略了c這個鍵的數組值。如果我們希望對多維數組中的所有值進行計數,必須先將其“扁平化”(flatten),例如使用array_walk_recursive()或者通過遞歸來處理。

4. 解決多維數組的計數問題

如果需要統計多維數組中每個值的出現次數,可以使用遞歸的方法來扁平化數組。以下是一個示例:

 function flattenArray($array) {
    $result = [];
    array_walk_recursive($array, function($value) use (&$result) {
        $result[] = $value;
    });
    return $result;
}

$array = array(
    'a' => 1,
    'b' => 2,
    'c' => array(1, 2),
    'd' => 3,
);

$flattenedArray = flattenArray($array);
$result = array_count_values($flattenedArray);
print_r($result);

輸出結果將是:

 Array
(
    [1] => 2
    [2] => 2
    [3] => 1
)

通過遞歸方式,我們將多維數組扁平化之後,再使用array_count_values()進行計數。這樣就能夠統計多維數組中的所有值。

總結

array_count_values()函數本身只能用於一維數組。如果傳入一個多維數組,函數只會統計最外層元素的值,而不會對嵌套數組中的值進行計數。要處理多維數組,您可以先通過遞歸或其他方式將其扁平化,然後再使用array_count_values()來統計每個值的出現次數。