PHP使用交集法和差集法得到相同结果的思路

模拟场景

工厂生产的衣服款式 A-Z,商户仅购买工厂生产的衣服款式A、B、C,每种款式仅默认配送一个该款式下的定制配饰 a1、b1、c1。每种款式可能有 1-N 种配饰。还有通用配饰 0-9 ,现在通过商户角色视角,让商户可以选配的配饰一共都有哪些?

解答

模型抽象

A款式配饰 a1、a2、a3,默认配送为 a1
B款式配饰 b1、b2,默认配送为 b1
C款式配饰 c1,默认配送为 c1
通用配饰 1,2,3

同学甲感觉同学乙的差集法不太容易理解,顺手改为了交集法。你觉得哪种方法更好呢?

<?php

$result = $result2 = [1, 2, 3, 'a1', 'b1', 'c1'];
$all = ['A' => ['a1', 'a2', 'a3'], 'B' => ['b1', 'b2'], 'C' => ['c1'], 'D' => ['d1', 'd2']]; // 全部款式的配饰,贴合实际应用场景

foreach ($all as $k => $v) {
    echo "------款式{$k}------\n";
    echo "------交集法------\n";
    $t = array_intersect($v, $result);
    print_r($t);
    if ($t && $t != $v) {
        // print_r($v);
        $result = array_merge($result, $v);
        print_r($result);
    }
    echo "------差集法------\n";
    $t = array_diff($v, $result2);
    print_r($t);
    if ($t && $t != $v) {
        // print_r($v);
        $result2 = array_merge($result2, $v);
        print_r($result2);
    }
}

var_dump(count(array_unique($result)) == count(array_unique($result2)));
sort($result); // jeeinn按:排序PHP8与7数字与字母顺序不同,PHP8为数字在前
echo "------最终结果------\n";
print_r(array_unique($result));

交集比较好理解,差集又叫相对补集参看百科:https://baike.baidu.com/item/%E7%9B%B8%E5%AF%B9%E8%A1%A5%E9%9B%86/942337

Author: thinkwei

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注