0

母音で始まる配列内の要素のみを削除する方法を探しています。そのため、アダムは削除され、エドワードは削除されます。私の友人は、これを行うにはmb_substrと関連する関数を使用すると言いました。

しかし、これがどのように見えるか、またはこれにマルチバイト文字列操作を使用する理由についてさえ、私は迷っています。配列から母音で始まるすべての要素を削除する方法について、誰かが私を正しい方向に向けることができますか

何人か混乱させてしまったので

配列が次のようになっている場合:

$array = array(
    array('title' => 'apples'),
    array('title' => 'jack')
)

リンゴは削除されますが、ジャックは母音で始まらないため削除されません。

4

3 に答える 3

2

どの言語 / 母音のセットを期待しますか? それが英語でaeiou、ここでマルチバイト機能が必要ない場合は、ケースはクローズされます。しかし、もっと興味深いものにしましょう。9 つの母音を持つポーランド語の入力を期待するとしますaeiouyąęó

問題はエンコーディングにあります。今は 2013 年であり、誰もが を使用する必要がありutf8ます。それがわかっている場合は、それで問題ありません。先に進むことができます。そうでない場合は、マルチバイト関数が必要になります。残りの 2 つは必要ありません。iso-8859-2windows-1250utf8

ただし、データがさまざまなソースから来ており、それがエンコーディングであるかどうかを判断できない場合でも、すべてのケースに正しく対応する必要があります. しかし、確かに mb_* 関数が必要になります。

于 2013-01-01T00:25:31.853 に答える
0
$new_array = array_filter(
    $array, 
    function($x) { 
        return !stristr('aeiou', $x['title'][0]); 
    }
);

array_filter関数がtrueであるすべての要素を持つ新しい配列を返します。$xはフィルタリングされる配列の要素であり、$x['title'][0]そのタイトル要素の値の最初の文字です。 stristr最初の引数で大文字と小文字を区別しない検索を実行するため、その最初の文字が母音の文字列に含まれているかどうかを確認します。見つかった場合stristr()は位置を返し、見つからなかった場合はfalseを返します。これの真理値を反転するため、最初の文字が母音でない!場合、関数はtrueを返します。

于 2012-12-31T22:35:24.777 に答える
-1

使用したい唯一の理由mb_*は、ASCII ではない文字列 (「ふーばー」など) を扱う場合です。しかし、あなたの場合は母音だけを探しているので、意味がありません。

// go over each element in the array
foreach ($array as $key => $value)
{
    //check if the first character of the title is a vowel (ignore case, ie 'a' or 'A')
    if (stristr("aeiou", $value['title'][0]))
    {
        // remove it from the array
        unset($array[$key]);
    }
}
于 2012-12-31T23:16:50.683 に答える