当前位置: 首页> 最新文章列表> 结合 array_filter() 做复杂筛选后的统计

结合 array_filter() 做复杂筛选后的统计

M66 2025-05-16

在 PHP 中,我们经常需要对数据进行筛选和统计。array_filter()array_count_values() 是两个非常有用的函数。array_filter() 可以根据条件过滤数组中的元素,而 array_count_values() 可以对数组中的值进行计数并返回结果。结合这两个函数,我们可以高效地对数组进行复杂的筛选,并在此基础上进行统计分析。

1. 使用 array_filter() 进行复杂筛选

array_filter() 函数接受两个参数,第一个是数组,第二个是回调函数。回调函数用来定义筛选的条件,只有满足条件的元素才会被保留。

例如,假设我们有一个包含多个网址的数组,我们希望过滤出所有来自域名 m66.net 的 URL。

<?php
// 原始数组
$urls = [
    'https://m66.net/page1',
    'https://example.com/page2',
    'https://m66.net/page3',
    'https://otherdomain.net/page4',
    'https://m66.net/page5',
];

// 使用 array_filter() 过滤出 m66.net 域名的 URL
$filteredUrls = array_filter($urls, function ($url) {
    return strpos($url, 'm66.net') !== false;
});

// 打印过滤后的数组
print_r($filteredUrls);
?>

输出结果:

Array
(
    [0] => https://m66.net/page1
    [2] => https://m66.net/page3
    [4] => https://m66.net/page5
)

在这个例子中,array_filter() 用来筛选出所有包含 m66.net 的 URL。

2. 使用 array_count_values() 进行统计分析

array_count_values() 函数会返回一个数组,其中包含原数组中每个值出现的次数。我们可以将筛选后的结果传递给 array_count_values() 来进行统计分析。

例如,我们想要统计 m66.net 域名出现的次数。

<?php
// 使用 array_count_values() 统计出现的次数
$urlCount = array_count_values($filteredUrls);

// 打印统计结果
print_r($urlCount);
?>

输出结果:

Array
(
    [https://m66.net/page1] => 1
    [https://m66.net/page3] => 1
    [https://m66.net/page5] => 1
)

在这个例子中,array_count_values() 返回的是每个 URL 的出现次数。因为每个 URL 在数组中只出现了一次,结果中每个 URL 都是 1。

3. 综合运用 array_filter()array_count_values()

通过结合 array_filter()array_count_values(),我们能够对数据进行精确筛选并进行统计分析。这种方法非常适合处理复杂的数据筛选和分析任务。

例如,假设我们有一个更复杂的数组,其中包含不同的 URL 以及访问次数,我们可以首先筛选出符合条件的 URL,然后统计每个 URL 的出现频率。

<?php
// 原始数组,包括访问次数
$urlsWithVisits = [
    'https://m66.net/page1' => 10,
    'https://example.com/page2' => 5,
    'https://m66.net/page3' => 8,
    'https://otherdomain.net/page4' => 12,
    'https://m66.net/page5' => 15,
];

// 过滤出 m66.net 域名的 URL
$filteredUrlsWithVisits = array_filter($urlsWithVisits, function ($url) {
    return strpos($url, 'm66.net') !== false;
}, ARRAY_FILTER_USE_KEY);

// 统计访问次数
$urlVisitCount = array_count_values($filteredUrlsWithVisits);

// 打印结果
print_r($urlVisitCount);
?>

输出结果:

Array
(
    [10] => 1
    [8] => 1
    [15] => 1
)

在这个例子中,array_filter() 用于筛选出 m66.net 域名的 URL,array_count_values() 则统计了这些 URL 出现的次数。

总结

通过结合 array_filter()array_count_values(),我们可以灵活地对数组数据进行筛选和统计分析。这种方法适用于各种数据筛选和统计场景,特别是在处理大型数据集时,可以有效提高代码的可读性和执行效率。