需求
最少的時間復雜度判斷$a數組是否是$b數組的子集
// 快速的判斷$a數組是否是$b數組的子集
$a = array(135,138);
$b = array(135,138,137);
實現方法
這里介紹三種方法,思路其實是相同的,差別在於實現的代碼上
1.for循環遍歷
$flag = 1; foreach ($a as $va) { if (in_array($va, $b)) { continue; }else { $flag = 0; break; } } if ($flag) { echo "Yes"; }else { echo "No"; }
$flag = 1; foreach ($a as $va) { if (in_array($va, $b)) { continue; }else { $flag = 0; break; } } if ($flag) { echo "Yes"; }else { echo "No"; }
2.array_diff的使用;計算數組的差集
array_diff(array1,array2,array3...);
返回值: 返回差集數組,該數組包括了所有在被比較的數組(array1)中,但是不在任何其他參數數組(array2 或 array3 等等)中的鍵值。
$c = array_diff($a, $b); print_r($c); $flag = empty($c)?1 : 0; if ($flag) { echo "Yes"; }else { echo "No"; }
$c = array_diff($a, $b); print_r($c); $flag = empty($c)?1 : 0; if ($flag) { echo "Yes"; }else { echo "No"; }
3.array_intersect的使用;計算數組的交集
array_intersect(array1,array2,array3...);
返回值: 返回交集數組,該數組包括了所有在被比較的數組(array1)中,同時也在任何其他參數數組(array2 或 array3 等等)中的鍵值。
if ($a == array_intersect($a, $b)) { $flag = 1; }else { $flag = 0; } if ($flag) { echo "Yes"; }else { echo "No"; }
if ($a == array_intersect($a, $b)) { $flag = 1; }else { $flag = 0; } if ($flag) { echo "Yes"; }else { echo "No"; }