0

我正在寻找一种仅删除数组中以元音开头的元素的方法。所以亚当将被删除,爱德华将被删除等等。我的朋友告诉我,要做到这一点,我会使用mb_substr和相关函数。

但是我不知道这会是什么样子,甚至为什么我会对此使用多字节字符串操作。有人能指出我正确的方向吗?请告诉我如何从数组中删除所有以元音开头的元素

因为我迷惑了一些人

如果数组看起来像这样:

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

那么 apples 将被删除,而 jack 则不会,因为它不是以元音开头的。

4

3 回答 3

2

您期望什么语言/元音集?如果是英文,aeiou那么这里不需要多字节函数,case 已关闭。但是让我们让它更有趣,假设我们期望波兰语输入有 9 个元音:aeiouyąęó

现在问题在于编码。现在是 2013 年,每个人都应该使用utf8,但众所周知,有些人只是想看着世界燃烧,仍然使用iso-8859-2甚至更糟windows-1250。如果我们知道,那就太好了,我们可以继续 - 如果utf8是,则需要多字节函数,其余两个则不需要。

但是,如果数据来自各种来源,并且您无法确定它的编码,但仍然必须正确响应所有情况......好吧,那么我为您感到抱歉,因为很难确定真正的编码。但是你肯定需要 mb_* 函数。

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

array_filter返回一个新数组,其元素是函数为真的所有元素。$x是被过滤的数组的元素,并且$x['title'][0]是其标题元素值的第一个字符。 stristr对第一个参数执行不区分大小写的搜索,因此它检查第一个字符是否在元音字符串中。如果找到,stristr()则返回位置,否则返回false;!反转 this 的真值,因此如果第一个字符不是元音,则函数返回 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 回答