簡體   English   中英

在數組的 php 數組中計算相似值並在新數組中添加唯一

[英]Count similar values in php array of array and add unique in a new array

我在 php 陣列上遇到了一些算法問題。 這是我在幾個日志文件上的 grep 之后得到的一種示例,並將其存儲在一個數組中。 它可以更長,每個元素都是 grep 的結果,具體取決於文件夾中日志文件的數量)。

(
    [0] => Array
        (
            [0] => : [POST] /api_v2/resources/new_service_indexes

            [1] => : [POST] /api_v2/resources/new_service_tree_categories

            [2] => : [POST] /api_v2/users/add_device

            [3] => : [POST] /api_v2/users/check_email

        )

    [1] => Array
        (
            [0] => : [GET] /api_v2/resources/categories

            [1] => : [POST] /api_v2/resources/new_service_indexes

            [2] => : [POST] /api_v2/resources/new_service_tree_categories

            [3] => : [POST] /api_v2/users/add_device

            [4] => : [POST] /api_v2/users/check_email

            [5] => : [POST] /api_v2/users/facebook_login

            [6] => : [POST] /api_v2/users/login

            [7] => : [POST] /api_v2/users/register


        )

    [2] => Array
        (
            [0] => : [POST] /api_v2/resources/new_service_indexes

            [1] => : [POST] /api_v2/resources/new_service_tree_categories

            [2] => : [POST] /api_v2/users/add_device

            [3] => : [POST] /api_v2/users/facebook_login

            [4] => : [POST] /api_v2/users/login

        )
)

我想在刪除它們之前計算所有鍵的出現次數,並獲得一個新數組,其中有唯一鍵和計數。 例子:

        (
            [name] => : [GET] /api_v2/resources/categories
            [count] => : 2

            [name] => : [POST] /api_v2/resources/new_service_indexes
            [count] => : 3

            [name] => : [POST] /api_v2/resources/new_service_tree_categories
            [count] => : 5

            [name] => : [POST] /api_v2/users/add_device
            [count] => : 2 

            [name] => : [POST] /api_v2/users/check_email
            [count] => : 2

            [name] => : [POST] /api_v2/users/facebook_login
            [count] => : 6

            [name] => : [POST] /api_v2/users/login
            [count] => : 2

            [name] => : [POST] /api_v2/users/register
            [count] => : 2

        )

您可以展平 arrays 並計算值:

$result = array_count_values(array_merge(...$array));

應該產生類似的東西:

Array (
            [ : [GET] /api_v2/resources/categories] => 2
            [ : [POST] /api_v2/resources/new_service_indexes] => 3
)

您顯示的結果數組是不可能的,除非它也是二維的。 要做到這一點:

foreach($result as $key => $val) {
    $new_result[] = ['name' => $key, 'count' => $val];
}

但是在執行grep時合並 arrays 可能會更容易,但是您沒有顯示該代碼。 您可以使用該代碼提出另一個問題,以獲得更好的數組格式或最終結果。

您可以將array_count_valuesarray_merge... splat 運算符一起使用來獲取計數,然后使用array_walk構建所需的數組

$new = array_count_values(array_merge(...$a));
array_walk($new, function($v, $k) use (&$res){
  $res[] = ['name' => $k, 'count' => $v];
});

示例: https://3v4l.org/1UqA8

暫無
暫無

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

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