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 に答える