找到字符串中未使用的所有字母

时间:2012-04-30 23:19:27

标签: php string

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

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

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

我可以使用foreach和字符数组轻松完成此操作,但我想知道是否有人有更优雅的解决方案。

4 个答案:

答案 0 :(得分:5)

这就是我想出来的。

function findNot($str){
    return array_diff(range('a','z'), array_unique(str_split(strtolower($str))));
}

答案 1 :(得分: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);
}

答案 2 :(得分:3)

你可以这样做:

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

$result = str_replace($search, '', $text);

答案 3 :(得分: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;
}