我希望能够做这样的事情:
$str="abc";
echo findNot($str); //will echo "defghijklomnopqrstuvwxyz"
$str2="happy birthday";
echo findNot($str2); //will echo "cfgjklmnoqsuvwxz"
基本上,它会找到字符串中未表示的所有字母,并将它们以数组或字符串的形式返回。
我可以用字符数组轻松做到这一点foreach
,但我想知道是否有人有更优雅的解决方案。
这就是我想出的。
function findNot($str){
return array_diff(range('a','z'), array_unique(str_split(strtolower($str))));
}
这个怎么样
$str="abc";
var_dump(findNot($str));
function findNot($string)
{
$letters = range('a', 'z');
$presents = array_map(function($i) { return chr($i); }, array_keys(array_filter(count_chars($string))));
return array_diff($letters, $presents);
}
PS:implode
如果您需要一串字符而不是数组的结果
PPS:不确定它是否是“更优雅”的解决方案:-)
PPPS:我能想到的另一个解决方案是
$str="abc";
var_dump(findNot($str));
function findNot($string)
{
$letters = range('a', 'z');
$presents = str_split(count_chars($string, 4));
return array_intersect($letters, $presents);
}
你可以这样做:
$text = 'abcdefghijklmnop';
$search = array('a','b','c');
$result = str_replace($search, '', $text);
Zerk 的解决方案很好。我想出了这个类似的例子,不是那么优雅。
<?php
$alphabet = 'abcdefghijklmnopqrstuvwxyz';
$alphabet = preg_split('//', $alphabet, -1, PREG_SPLIT_NO_EMPTY);
$str="abc";
var_dump( findNot($str) ); //will echo "defghijklomnopqrstuvwxyz"
$str2="happy birthday";
var_dump( findNot($str2) ); //will echo "cfgjklmnoqsuvwxz"
function findNot($str)
{
global $alphabet;
$str = str_replace(' ', '', $str);
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
$chars = array_unique($chars);
sort($chars);
$diff = array_diff($alphabet, $chars);
return $diff;
}