按首字母过滤数组

时间:2010-07-29 19:58:23

标签: php arrays filtering

我正在建立一个平台。在我的代码中,有一个看起来像这样的数组(PHP):

$entries = array('p01','p02','g01','g02','a001','a002')

我需要编写一个基于第一个字母过滤数组的脚本。例如,要求那些带有起始字母“p”的人会给我

$filtered_entries = array('p01','p02');

同样,如果我要求那些带有首字母“g”或“a”的人,那么它也会给我这些。知道怎么做到这一点吗?

6 个答案:

答案 0 :(得分:8)

PHP中有一个array_filter()函数可用于实现此目的:

$filtered = array_filter($array, create_function('$a', 'return $a[0] == "' . $letter . '";'));

我会留给你来概括处理所有字母的功能。

请参阅:http://www.php.net/manual/en/function.array-filter.php

答案 1 :(得分:1)

class FirstCharFilter {
    public $char = 'p';
    function filter(array $array){
        return array_filter($array,array($this,'checkFirstChar'));
    }
    public function checkFirstChar($a){
       return $a[0] == $this->char;
    }
}
$filter = new FirstCharFilter();
$filter->char = 'p';
var_dump($filter->filter($array));
$filter->char = 'g';
var_dump($filter->filter($array));

或者,如果您只需要循环,请展开FilterIterator

class FirstCharIterator extends FilterIterator {
    public $char = '';
    function accept(){
        $string = $this->current();
        return is_string($string) && $string[0] == $this->char;
    }
}
$iter = new FirstCharIterator(new ArrayIterator($array));
$iter->char = 'p';
foreach($iter as $item) echo $item."\n";

答案 2 :(得分:1)

$entries = array('p01','p02','g01','g02','a001','a002');
print_r(
    preg_grep('~^p~', $entries) // or preg_grep("~^$letter~",.....
);

http://php.net/manual/en/function.preg-grep.php

答案 3 :(得分:0)

function filter_array($array, $letter){
$filtered_array=array();
 foreach($array as $key=>$val){
  if($val[0]==$letter){
   $filtered_array[]=$val;
  }
 }
return $filtered_array;
}

像这样使用它来获取所有p

$entries = array('p01','p02','g01','g02','a001','a002')
$filtered=filter_array($entries, 'p');

答案 4 :(得分:0)

$entries = array('p01','p02','g01','g02','a001','a002');

$filterVar = null;

function filterFunction($v) {
    global $filterVar;

    if (substr($v,0,1) == $filterVar) {
        return $v;
    }
}

$filterVar = 'a';
$newEntries = array_filter($entries,'filterFunction');


var_dump($newEntries);

答案 5 :(得分:0)

这是使用闭包生成过滤函数的一种方法。

function filter_factory($letter) {
    return function ($input) use ($letter) {
        return is_string($input) && $input[0] === $letter;
    };
}

$entries   = array('p01','p02','g01','g02','a001','a002');
$p_entries = array_filter($entries, filter_factory('p'));