模拟场景
工厂生产的衣服款式 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