楼上答案的效率基本上是可以的 ... 不过还有一些优化的空间 ... 如下 ...
$check_if_all_exist = function( $a, $b ) {
/* most effective way to traverse a string ... */
foreach( array_unique( str_split( $a ) ) as $a_single )
/* stop searching if we meet something not exists in $b ... */
if ( false === strpos( $b, $a_single ) )
/* all passes ..? */
return false; return true;
};
仅限原字符串只有字母数字的情况 ... 宽字符集的话会出错 ...
这比一次 strlen() 之后循环执行 substr() 效率要高很多 ... 这也是我能想到的效率最高的方式 ...
至于为什么没有在最后进行一次性 array_diff() 比较只是因为没有必要 ...
我们只是想知道 是否 字符串 A 里面的元素在 字符串 B 里都有 ... 而不是都有 哪些 重复 ...
一旦 字符串 A 里面出现了 字符串 B 里面没有的元素立即停止就好 ...
我写了几个 testcase ... 最佳的情况是 $a 和 $b 都非常长 ... 我的算法效率大概是楼上算法的 1330% ...
平常情况也会快 20% - 50% 不等 ... 并且楼上三行代码我也是三行 ... code 长度相差也不会很多 ...
想来想去也想不到什么效率更高的方法了 ... 恩恩 ... 就是这样啦 ...