我正在建立一个平台。在我的代码中,有一个看起来像这样的数组(PHP):
$entries = array('p01','p02','g01','g02','a001','a002')
我需要编写一个基于第一个字母过滤数组的脚本。例如,要求那些带有起始字母“p”的人会给我
$filtered_entries = array('p01','p02');
同样,如果我要求那些带有首字母“g”或“a”的人,那么它也会给我这些。知道怎么做到这一点吗?
答案 0 :(得分:8)
PHP中有一个array_filter()
函数可用于实现此目的:
$filtered = array_filter($array, create_function('$a', 'return $a[0] == "' . $letter . '";'));
我会留给你来概括处理所有字母的功能。
答案 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~",.....
);
答案 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'));