我会用mb_substr字符串来做这个吗?

时间:2012-12-31 22:14:42

标签: php arrays multibyte

我正在寻找一种方法来只删除以元音开头的数组中的元素。所以adam会被删除,edward会被删除等等。我的朋友告诉我,为了做到这一点,我会使用mb_substr和相关的功能。

但我很遗憾这会是什么样子,甚至为什么我会使用多字节字符串操作。有人可以指出我正确的方向,你将如何从数组中删除所有以元音开头的元素

因为我让一些人感到困惑

如果数组如下所示:

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

然后苹果将被删除,而jack则不会,因为它不会以元音开头。

3 个答案:

答案 0 :(得分:2)

您期望使用哪种语言/元音?如果它是英语和aeiou那么你不需要多字节功能,关闭案例。但是让我们更有意思,我们希望波兰语输入有9个元音:aeiouyąęó

现在问题在于编码。这是2013年,每个人都应该使用utf8,但众所周知,有些人只想观看世界刻录,仍然使用iso-8859-2甚至更差windows-1250。如果我们知道它,那很好,我们可以继续 - 如果它是utf8而不是,则需要多字节功能,其余两个则不需要。

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

答案 1 :(得分:0)

$new_array = array_filter(
    $array, 
    function($x) { 
        return !stristr('aeiou', $x['title'][0]); 
    }
);

array_filter返回一个新数组,其元素都是函数为true的元素。 $x是要过滤的数组的元素,$x['title'][0]是其title元素值的第一个字符。 stristr对第一个参数执行不区分大小写的搜索,因此它会检查第一个字符是否在元音字符串中。如果找到,stristr()返回位置,否则返回false; !反转了它的真值,因此如果第一个字符是元音,则该函数返回true。

答案 2 :(得分:-1)

当您使用非ASCII字符串(例如“ふーばー”)时,您只想使用mb_*。但在你的情况下,因为你只是在寻找元音,这将毫无意义。

// 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]);
    }
}