5

我希望能够做这样的事情:

$str="abc";
echo findNot($str); //will echo "defghijklomnopqrstuvwxyz"
$str2="happy birthday";
echo findNot($str2); //will echo "cfgjklmnoqsuvwxz"

基本上,它会找到字符串中未表示的所有字母,并将它们以数组或字符串的形式返回。

我可以用字符数组轻松做到这一点foreach,但我想知道是否有人有更优雅的解决方案。

4

4 回答 4

5

这就是我想出的。

function findNot($str){
    return array_diff(range('a','z'), array_unique(str_split(strtolower($str))));
}
于 2012-04-30T23:26:26.520 回答
4

这个怎么样

$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);
}
于 2012-04-30T23:23:19.573 回答
3

你可以这样做:

$text = 'abcdefghijklmnop';
$search = array('a','b','c');

$result = str_replace($search, '', $text);
于 2012-04-30T23:27:30.870 回答
0

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;
}
于 2012-04-30T23:25:39.797 回答