如何使用PHP从数组中复制所有元素

时间:2014-10-03 08:44:49

标签: php arrays

我有一个看起来像这样的数组

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
)

2 个答案:

答案 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()可让您的代码更具自我描述性,并且更加优雅。