我有以下阵列:搜索一个数组,并删除项,如果它不包含AZ或AZ用破折号
Array
(
[0] => text
[1] => texture
[2] => beans
[3] =>
)
我想摆脱条目不包含AZ或az与破折号。在这种情况下,数组项目3(只包含一个空格)。
我该怎么做?
我有以下阵列:搜索一个数组,并删除项,如果它不包含AZ或AZ用破折号
Array
(
[0] => text
[1] => texture
[2] => beans
[3] =>
)
我想摆脱条目不包含AZ或az与破折号。在这种情况下,数组项目3(只包含一个空格)。
我该怎么做?
尝试:
$input = array(/* your data */);
function azFilter($var){
return preg_match('/^[a-z-]+$/i', $var);
}
$output = array_filter($input, 'azFilter');
而且在PHP 5.3有可能简化它:
$input = array(/* your data */);
$output = array_filter($input, function($var){
return preg_match('/^[a-z-]+$/i', $var);
});
好了,只需你可以循环槽的阵列。创建一个正则表达式来测试它是否符合条件。如果失败,使用unset()移除选定的元素。
在循环迭代中取消设置不是一个好主意。 – 2011-06-13 13:09:51
对于您在问题中提供的数据,请使用具有空回调参数的array_filter()
函数。这将过滤掉所有空元素。
$array = array(...);
$array = array_filter($array);
如果你要过滤你在你的问题的文字描述的元素,那么你就需要添加一个回调函数,将根据您的需要返回true
(有效)或false
(无效)。您可能会发现ctype_alpha
函数对此很有用。
$array = array(...);
$array = array_filter($array, 'ctype_alpha');
如果你需要允许破折号,以及,你需要提供自己的功能回调:
$array = array(...);
$array = array_filter($array, function($test) {return preg_match('(^[a-zA-Z-]+$)', $test);});
此示例回调函数使用正则表达式利用的preg_match()
功能。可以制定正则表达式来表示特定的字符组,例如a-z
,A-Z
和示例中的破折号-
(减号)。
尝试:
<?php
$arr = array(
'abc',
'testing-string',
'testing another',
'sdas 213',
'2323'
);
$tmpArr = array();
foreach($arr as $str){
if(preg_match("/^([-a-z])+$/i", $str)){
$tmpArr[] = $str;
}
}
$arr = $tmpArr;
?>
输出:
array
0 => string 'abc' (length=3)
1 => string 'testing-string' (length=14)
,你如何意味着摆脱了,如果你有[0 1 2 3]和2位只有你想[ 0 1 2]或[0 1 3]? – 2011-06-13 13:05:31
我想删除项目3. – ritch 2011-06-13 13:06:31
另一位极客问这个问题(并提供了两个具体选项)的原因是“我想删除项目3”太含糊。重复它没有帮助。请回答另一位极客为您精心构建的两个具体选项之一。 – 2011-06-13 13:09:03