PHP:从包含的数组中删除条目

时间:2013-07-12 16:00:37

标签: php arrays parsing

我使用带有file_get_contents的网页生成一个带有URL的数组,我想删除条目(密钥和值),如果它们包含特定数据。

例如:

[0] = 'http://somesite.com'
[1] = 'http://someothersite.com/article/id/55/file.pdf'
[2] = 'http://someothersite.com/article/id/56/file2.pdf'
[3] = 'javascript:void(0)'
[4] = 'mailto:info@somesite.com'

我想删除条目的

http://somesite.com
javascript:void(0)
mailto:info@somesite.com

因为我只需要带有.pdf文件的URL。

我该怎么做?

5 个答案:

答案 0 :(得分:2)

你可以使用数组过滤器(注意这个语法适用于php 5.3 +)

$filtered = array_filter($array, function ($a){ return preg_match ('/.pdf$/', $a); });

答案 1 :(得分:0)

$array = array('http://somesite.com','http://someothersite.com/article/id/55/file.pdf','http://someothersite.com/article/id/56/file2.pdf','javascript:void(0)','mailto:info@somesite.com');

for($i=0; $i<=count($array)+1 ; $i++)
{
    if(end(explode('.',$array[$i])) != "pdf" )
    {
        unset($array[$i]);
    }

}

答案 2 :(得分:0)

试试这个!!!!

$haystack = array (
'0' => 'http://somesite.com',
'1' => 'http://someothersite.com/article/id/55/file.pdf',
'2' => 'http://someothersite.com/article/id/56/file2.pdf',
'3' => 'javascript:void(0)',
'4' => 'mailto:info@somesite.com'
);

$matches  = preg_grep ('/pdf/i', $haystack);

//print_r ($matches);

foreach($matches as $k=>$v):
    echo $matches[$k]."<br/>";
endforeach;

<强>文档 preg_grep

答案 3 :(得分:0)

希望这会有所帮助:

$sites[0] = 'http://somesite.com';
$sites[1] = 'http://someothersite.com/article/id/55/file.pdf';
$sites[2] = 'http://someothersite.com/article/id/56/file2.pdf';
$sites[3] = 'javascript:void(0)';
$sites[4] = 'mailto:info@somesite.com';

echo '<pre>'.print_r($sites, true).'</pre>';

//loop through your array of items/sites
foreach($sites as $key=>$value){
    //remove whitespace
    $value = trim($value);

    //get last 4 chars of value
    $ext = substr($value, -4, 0);

    //check if it is not .pdf
    if($ext != '.pdf'){
        //unset item from array
        unset($sites[$key]);
    }
}

echo '<pre>'.print_r($sites, true).'</pre>';

答案 4 :(得分:0)

array_filter始终是一个选项,但如果您想删除特定值,则另一个优秀的候选人是array_diff

$remove = [
    'http://somesite.com',
    'javascript:void(0)',
    'mailto:info@somesite.com',
];

$filtered = array_diff($array, $remove);