2012-04-30 205 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'))'使字母:) –