2012-04-30 153 views
5

我希望能够做一些不使用的所有字母喜欢这样的:查找字符串

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

基本上,它会找到字符串中没有表示的所有字母和一个数组或字符串返回它们。

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

+1

“生日快乐” 这么想的有一个 “E” 在它:-P –

+0

@Rocket真的......在phptester测试时 – diracdeltafunk

回答

5

这是我想出来的。

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

谢谢,这个作品! – diracdeltafunk

+0

没问题。很高兴我能帮上忙。 :-) –

+0

上帝,我希望我能接受两个答案 – diracdeltafunk

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:不知道这是否是:-)

一个“更优雅的”解决方案

购买力平价:另一种解决办法,我能想到的是

$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); 
} 
+0

。净,我得到这个错误:'解析错误:语法错误,意想不到的T_FUNCTION,期待')'在第8行/home/jabouzic/public_html/phptester.net/txt/c6e64dbae6ae8ca4d0cfe6639f624fb9-67.176.58.205_1.php5' – diracdeltafunk

+0

@ Ben7005 :这是因为匿名函数只能在PHP 5.3+中使用。没有多少在线PHP测试人员支持5.3。 –

+0

@ Ben7005:因为它使用php5.3的功能。无论如何,添加一个较短的,这将适用于旧版本 – zerkms

0

加油嘴的搜索解决方案n很好。我想出了这个类似的例子,而不是优雅。

<?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; 
} 
3

你可以做这样的事情:

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

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

伟大的想法btw - 取代字母表中的字符串的所有字符 – zerkms

+0

是的,我同意。不完全是我在找什么,我不得不将文本转换为n数组(我知道它是一个内置的函数...) – diracdeltafunk

+0

你可以使用'str_split'(和'array_unique')将字符串转换为一个数组和'implode('',range('a','z'))'使字母:) –