2011-06-13 38 views
2

我有以下阵列:搜索一个数组,并删除项,如果它不包含AZ或AZ用破折号

Array 
(
    [0] => text 
    [1] => texture 
    [2] => beans 
    [3] => 
) 

我想摆脱条目不包含AZ或az与破折号。在这种情况下,数组项目3(只包含一个空格)。

我该怎么做?

+0

,你如何意味着摆脱了,如果你有[0 1 2 3]和2位只有你想[ 0 1 2]或[0 1 3]? – 2011-06-13 13:05:31

+0

我想删除项目3. – ritch 2011-06-13 13:06:31

+1

另一位极客问这个问题(并提供了两个具体选项)的原因是“我想删除项目3”太含糊。重复它没有帮助。请回答另一位极客为您精心构建的两个具体选项之一。 – 2011-06-13 13:09:03

回答

5

尝试:

$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); 
}); 
+0

这将删除整个数组。 – hakre 2011-06-13 13:14:34

+0

@hakre - 哈,好点 - 我错过了preg_match函数的第二个参数:)编辑。感谢它:D – hsz 2011-06-13 13:23:29

0

好了,只需你可以循环槽的阵列。创建一个正则表达式来测试它是否符合条件。如果失败,使用unset()移除选定的元素。

+1

在循环迭代中取消设置不是一个好主意。 – 2011-06-13 13:09:51

1

对于您在问题中提供的数据,请使用具有空回调参数的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和示例中的破折号-(减号)。

+0

'ctype_alpha'不包含破折号字符。 – hsz 2011-06-13 13:09:35

+0

如果数组项目包含例如2个空格? – ritch 2011-06-13 13:09:37

+0

@hsz:编辑。 @ritch:你的工作意味着什么?如果两个空格计为有效或无效?你真的能够读取PHP吗?如果应该删除两个空格,那么答案是:是的。 – hakre 2011-06-13 13:12:07

1

尝试:

<?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) 
相关问题