Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从数组中删除某些条目(使用正则表达式)?_Php_Arrays_Filter - Fatal编程技术网

Php 如何从数组中删除某些条目(使用正则表达式)?

Php 如何从数组中删除某些条目(使用正则表达式)?,php,arrays,filter,Php,Arrays,Filter,我正在编写一个类似Facebook的scraper来从给定的url获取信息。我只是完成基本功能的一步。目前的问题是删除无用的图像。 例如,当我运行一些随机url时,我会得到所有这些图像: Scraper Object ( [url] => http://buzz.money.cnn.com/2012/07/23/spain-italy-short-selling/?iid=HP_Highlight [title] => Spain and Italy ban shor

我正在编写一个类似Facebook的scraper来从给定的url获取信息。我只是完成基本功能的一步。目前的问题是删除无用的图像。 例如,当我运行一些随机url时,我会得到所有这些图像:

Scraper Object
(
    [url] => http://buzz.money.cnn.com/2012/07/23/spain-italy-short-selling/?iid=HP_Highlight
    [title] => Spain and Italy ban short selling  - The Buzz  - Investment and Stock Market News
    [description] => The Euronext 100 stock index falls sharply on renewed concerns about Spain.    Securities regulators in Spain and Italy both instituted short-selling bans Monday as financial markets tumbled.    The move is designed to limit the downward pressure
    [imageUrls] => Array
        (
            [0] => http://cnnmoneybuzzblog.files.wordpress.com/2012/07/chart_ws_index_euronext100_201272310932-09.png
            [1] => http://i.cdn.turner.com/money/.e1m/img/5.0/data/feargreed/scale.316x95.png
            [2] => http://i2.cdn.turner.com/money/.element/img/5.0/sections/contributors/ben_rooney_130.jpg
            [3] => http://i2.cdn.turner.com/money/.element/img/5.0/sections/contributors/catherine_tymkiw.02.jpg
            [4] => http://i2.cdn.turner.com/money/.element/img/5.0/sections/contributors/paul_lamonica.02.jpg
            [5] => http://i2.cdn.turner.com/money/.element/img/5.0/sections/contributors/hibah_yousuf.02.jpg
            [6] => http://i2.cdn.turner.com/money/.element/img/5.0/sections/contributors/maureen_farrell.02.jpg
            [7] => http://i2.cdn.turner.com/money/.element/img/5.0/sections/contributors/ben_rooney.02.jpg
            [8] => http://i.cdn.turner.com/money/.element/img/4.0/services/button_login.gif
            [9] => http://www.bizographics.com/collect/?fmt=gif&pid=311
            [10] => http://pixel.quantserve.com/pixel/p-5dyPa639IrgIw.gif
            [11] => http://i.cdn.turner.com/money/.element/img/1.0/misc/1.gif
            [12] => http://buzz.money.cnn.com/2012/07/23/spain-italy-short-selling/?iid=HP_Highlight//pixel.quantserve.com/pixel/p-18-mFEk4J448M.gif?labels=%2Clanguage.en%2Ctype.wpcom%2Cposttag.bonds%2Cposttag.dow%2Cposttag.ibex%2Cposttag.italy%2Cposttag.lehman%2Cposttag.milan%2Cposttag.nasdaq%2Cposttag.sp-500%2Cposttag.short-selling%2Cposttag.spain%2Cposttag.stock%2Cposttag.yields%2Cvip.cnnmoneybuzzblog
            [13] => http://stats.wordpress.com/b.gif?v=noscript
        )

)
我只需要找到一种方法来删除所有以.gif或.png结尾的图像,并将.jpg放在数组中,这样用户就可以查看并为本文选择合适的图像

我尝试过一些数组函数,但我认为这需要一些正则表达式的魔力,它才能在几乎任何给定的url中工作

另外,我可以使用
$info->url
$info->description
等访问所有数组数据。只需筛选该阵列,它就会准备就绪。

尝试阵列\u筛选:

回调函数应该是一个非常基本的函数,如果您的正则表达式与.png或.gif匹配,则返回false。

不使用正则表达式:

foreach ($objects_array as $obj){
  foreach($obj->imageUrls as $key => $img){
    if(substr($img, -4) === '.gif' || substr($img, -4) === '.png'){
      unset($key);
    }
  }
}
$pt = '/gif$|png$/';
foreach ($objects_array as $obj){
  foreach($obj->imageUrls as $key => $img){
    $res = preg_match($pt, $img);
    if($res){
      unset($key);
    }
  }
}
使用正则表达式:

foreach ($objects_array as $obj){
  foreach($obj->imageUrls as $key => $img){
    if(substr($img, -4) === '.gif' || substr($img, -4) === '.png'){
      unset($key);
    }
  }
}
$pt = '/gif$|png$/';
foreach ($objects_array as $obj){
  foreach($obj->imageUrls as $key => $img){
    $res = preg_match($pt, $img);
    if($res){
      unset($key);
    }
  }
}

您可以在构建阵列后进行筛选:

function only_jpgs($url){
    return substr($url, -4) == '.jpg' ? $url : false;
}

$info->imageUrls = array_filter($info->imageUrls, "only_jpgs");

但是,在构建阵列之前,您可能应该过滤掉这些图像。

离题:CNN Money Buzz博客出现在我收到的大量垃圾邮件中……我有一位客户喜欢链接到Money CNN。我只是让我的部分编码刮刀:PYou会恨我我的朋友,但是,它没有显示任何错误,但它仍然显示所有的图像文件,包括GIF和PNG。实际上,我删除了第一个foreach,因为只有一个对象$info仅从一个url收集信息。我有$info->url、$info->title、$info->description和数组$info->imageurl。有什么不对吗?@Richard MX当然我不会恨你;)快速猜测(因为我没有您的代码)尝试替换:
unset($key)使用:
unset($info->imageurl[$key])它正在工作!谢谢朋友:),如果有一天你来坎昆(是的,这里也有程序员:P),我请客喝酒!我的朋友,我没办法让这个工作。当您从array_过滤器调用“only_jpgs”时,该函数现在是如何运行的?$url是什么?我收到这个错误数组。\u filter()希望参数2是一个有效的回调,没有找到函数'only_jpgs',或者像这样使用它的函数名无效。谢谢。@Richard MX如果你不能剪切和粘贴,我帮不了你。