从数组中删除与 PHP 中的特定条件匹配的项目
Posted
技术标签:
【中文标题】从数组中删除与 PHP 中的特定条件匹配的项目【英文标题】:Remove items from an array where they match a certain criteria in PHP 【发布时间】:2012-12-04 10:27:22 【问题描述】:我有一系列产品,我需要删除所有引用网络研讨会的产品
我使用的php版本是5.2.9
$category->products
示例:
[6] => stdClass Object
(
[pageName] => another_title_webinar
[title] => Another Webinar Title
)
[7] => stdClass Object
(
[pageName] => support_webinar
[title] => Support Webinar
)
[8] => stdClass Object
(
[pageName] => support
[title] => Support
)
在这种情况下,数字 8 将被保留,但其他两个将被剥离...
有人可以帮忙吗?
【问题讨论】:
看起来像 array_filter() 的一个案例,带有一个回调来测试对象页面中的“网络研讨会” 【参考方案1】:查看array_filter()。假设您运行 PHP 5.3+,这可以解决问题:
$this->categories = array_filter($this->categories, function ($obj)
if (stripos($obj->title, 'webinar') !== false)
return false;
return true;
);
对于 PHP 5.2:
function filterCategories($obj)
if (stripos($obj->title, 'webinar') !== false)
return false;
return true;
$this->categories = array_filter($this->categories, 'filterCategories');
【讨论】:
您的代码错误您正在制作webinar
haystack 而不是针请参阅eval.in/4811
凌晨时分啊……抱歉! @Baba,感谢您的更正。 :)
那么你只需要将匿名函数移动到一个普通函数中,并使用它的名字作为回调。正如下面的雨果已经提到的。我也编辑了我的。 ;)【参考方案2】:
您可以使用 array_filter 方法。 http://php.net/manual/en/function.array-filter.php
function stripWebinar($el)
return (substr_count($el->title, 'Webinar')!=0);
array_filter($category->products, "stripWebinar")
【讨论】:
【参考方案3】:你可以试试
$category->products = array_filter($category->products, function ($v)
return stripos($v->title, "webinar") === false;
);
Simple Online Demo
【讨论】:
最后一次支持的 Andy 升级26-Feb-2009
......见php.net/ChangeLog-5.php ...你比你想象的要多......
感谢 eval.in 链接...非常值得收藏,不幸的是我使用的是 5.2.9以上是关于从数组中删除与 PHP 中的特定条件匹配的项目的主要内容,如果未能解决你的问题,请参考以下文章