[英]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_values
與array_merge
和...
splat 運算符一起使用來獲取計數,然后使用array_walk
構建所需的數組
$new = array_count_values(array_merge(...$a));
array_walk($new, function($v, $k) use (&$res){
$res[] = ['name' => $k, 'count' => $v];
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.