我有一个看起来像这样的数组
Array ( [0] => . [1] => .. [2] => error_2014-09-26.log [3] => error_2014-09-27.log [4] => error_2014-09-29.log [5] => error_2014-09-30.log [6] => error_2014-10-01.log [7] => error_2014-10-02.log [8] => error_2014-10-03.log [9] => error_2014-10-04.log [10] => index.php )
现在,我想获取所有元素“.log”文件?示例
Array ( [0] => error_2014-09-26.log [1] => error_2014-09-27.log [2] => error_2014-09-29.log [3] => error_2014-09-30.log [4] => error_2014-10-01.log [5] => error_2014-10-02.log [6] => error_2014-10-03.log [7] => error_2014-10-04.log )
答案 0 :(得分:0)
使用“。”中的PHP中提供的爆炸功能。作为推卸者
$array = Array
(
[0] => .
[1] => ..
[2] => error_2014-09-26.log
[3] => error_2014-09-27.log
[4] => error_2014-09-29.log
[5] => error_2014-09-30.log
[6] => error_2014-10-01.log
[7] => error_2014-10-02.log
[8] => error_2014-10-03.log
[9] => error_2014-10-04.log
[10] => index.php
)
$allowed = array("log");
foreach($array as $index = $value){
$value = end(explode(".",$value)); //return array [0]=>error_2014-09-26 [1]=>log
if(!in_array($value,$allowed)){
unset($array[$index]);
}
}
答案 1 :(得分:0)
array_filter()
可能是你的朋友。这似乎符合您问题中的描述(但不是问题的主题,这似乎与问题不符?)
$original = [
".",
"..",
"error_2014-09-26.log",
"error_2014-09-27.log",
"error_2014-09-29.log",
"error_2014-09-30.log",
"error_2014-10-01.log",
"error_2014-10-02.log",
"error_2014-10-03.log",
"error_2014-10-04.log",
"index.php"
];
$filtered = array_filter($original, function($entry){
return preg_match("/\.log$/", $entry);
});
echo "<pre>";
var_dump($filtered);
echo "</pre>";
返回:
array(8) {
[2]=>
string(20) "error_2014-09-26.log"
[3]=>
string(20) "error_2014-09-27.log"
[4]=>
string(20) "error_2014-09-29.log"
[5]=>
string(20) "error_2014-09-30.log"
[6]=>
string(20) "error_2014-10-01.log"
[7]=>
string(20) "error_2014-10-02.log"
[8]=>
string(20) "error_2014-10-03.log"
[9]=>
string(20) "error_2014-10-04.log"
}
只需foreach()
即可轻松完成,但使用array_filter()
可让您的代码更具自我描述性,并且更加优雅。