我正在寻找一种方法来只删除以元音开头的数组中的元素。所以adam会被删除,edward会被删除等等。我的朋友告诉我,为了做到这一点,我会使用mb_substr和相关的功能。
但我很遗憾这会是什么样子,甚至为什么我会使用多字节字符串操作。有人可以指出我正确的方向,你将如何从数组中删除所有以元音开头的元素
因为我让一些人感到困惑
如果数组如下所示:
$array = array(
array('title' => 'apples'),
array('title' => 'jack')
)
然后苹果将被删除,而jack则不会,因为它不会以元音开头。
答案 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]);
}
}