You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多来源URL数组对比与值拆分及重复值分组实现咨询

PHP数组URL按来源归类拆分方案

嘿,我来帮你搞定这个数组拆分的问题!你需要的是把每个URL对应的来源数组(A、B、C)找出来,然后按来源完成归类拆分对吧?咱们可以通过构建一个URL到来源的映射,再根据映射结果整理出不同的分组,比如仅属于单个数组的URL、多个数组共有的URL等等。

实现思路

  1. 给每个原始数组打上来源标识(A、B、C)
  2. 构建一个映射数组,用URL作为键,值是该URL所属的来源集合
  3. 遍历所有原始数组,填充这个映射数组(注意同一个URL在同一数组中重复出现时,来源只记录一次)
  4. 根据映射数组,把URL按「仅单个来源」「多个来源共有」等规则分组

代码示例

<?php
// 你的原始URL数组
$urlsFromA = ['http://www.test.com', 'http://www.example.com', 'http://www.google.com', 'http://www.twitter.com'];
$urlsFromB = ['https://www.test.com', 'http://www.example.com', 'http://www.bing.com'];
$urlsFromC = ['http://www.test.com', 'http://www.google.com'];

// 第一步:构建URL到来源的映射
$urlSources = [];

// 处理数组A
foreach ($urlsFromA as $url) {
    if (!isset($urlSources[$url])) {
        $urlSources[$url] = [];
    }
    // 确保同一来源只添加一次
    if (!in_array('A', $urlSources[$url])) {
        $urlSources[$url][] = 'A';
    }
}

// 处理数组B
foreach ($urlsFromB as $url) {
    if (!isset($urlSources[$url])) {
        $urlSources[$url] = [];
    }
    if (!in_array('B', $urlSources[$url])) {
        $urlSources[$url][] = 'B';
    }
}

// 处理数组C
foreach ($urlsFromC as $url) {
    if (!isset($urlSources[$url])) {
        $urlSources[$url] = [];
    }
    if (!in_array('C', $urlSources[$url])) {
        $urlSources[$url][] = 'C';
    }
}

// 第二步:按来源分组整理结果
$groupedUrls = [
    '仅来自A' => [],
    '仅来自B' => [],
    '仅来自C' => [],
    'A和B共有' => [],
    'A和C共有' => [],
    'B和C共有' => [],
    '三个数组共有' => []
];

foreach ($urlSources as $url => $sources) {
    sort($sources); // 排序来源,保证判断逻辑一致
    $sourceKey = implode('', $sources);
    
    switch ($sourceKey) {
        case 'A':
            $groupedUrls['仅来自A'][] = $url;
            break;
        case 'B':
            $groupedUrls['仅来自B'][] = $url;
            break;
        case 'C':
            $groupedUrls['仅来自C'][] = $url;
            break;
        case 'AB':
            $groupedUrls['A和B共有'][] = $url;
            break;
        case 'AC':
            $groupedUrls['A和C共有'][] = $url;
            break;
        case 'BC':
            $groupedUrls['B和C共有'][] = $url;
            break;
        case 'ABC':
            $groupedUrls['三个数组共有'][] = $url;
            break;
    }
}

// 输出查看结果
echo "<pre>";
print_r($groupedUrls);
echo "</pre>";
?>

额外优化提示

如果需要忽略HTTP/HTTPS协议的差异(比如把http://www.test.com和https://www.test.com视为同一个URL),可以添加一个提取域名的辅助函数:

function getDomain($url) {
    $parsed = parse_url($url);
    return $parsed['host'];
}

之后遍历数组时,用getDomain($url)代替原URL作为映射数组的键即可。

内容的提问来源于stack exchange,提问作者LukeKov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:11:32