首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果数组与string - php匹配,则从数组中删除值。

如果数组与string - php匹配,则从数组中删除值。
EN

Stack Overflow用户
提问于 2019-11-19 11:30:34
回答 1查看 484关注 0票数 1

我有一个如下所示的数组:

代码语言:javascript
复制
staff : staff,company
managers : managers,staff,company
executives : executives,staff,company
customers : customers,company
loyalty members : loyalty members,customers,company
non loyalty : non loyalty,customers,company

数组由以下命令组成:

代码语言:javascript
复制
array_push($group_array, "$group : $area"); 

这个数组是从命令的输出中创建的,我想移除值、职员和客户,因为就我的目的而言,他们基本上是父母,所以我不希望他们出现在我的数组中。

我一直试图找到一种方法来做这个(不是我的实际php cod)e:

代码语言:javascript
复制
if array_value contains ",group," then remove it

为了做到这一点,我一直在尝试使用strpos,但我不知道如何比较数组值的不同区域。这仅从我的数组中删除了所有项:

代码语言:javascript
复制
if (strpos($area, ",$group,") !== false) {
    $group_array = array_diff($group_array, group_array(",$group,"));
 }

此外,我的数组并不总是与上面的完全匹配,但它总是遵循相同的布局,例如组:组、父、父

如果在页面底部运行php,则在html页面中使用php:

代码语言:javascript
复制
foreach($group_array as $items ){
    echo "$items <br>";
} 

我的输出是空白。我想是因为我的if匹配了所有的东西?

预期的(希望的)数组看起来是这样的,但是它不像删除项0和3那么简单,因为数组可能会改变:

代码语言:javascript
复制
managers : managers,staff,company
executives : executives,staff,company

loyalty members : loyalty members,customers,company
non loyalty : non loyalty,customers,company

我知道我没有把这句话说得很好,我期待着一股谩骂和下注的洪流,但我尽我最大的努力来解释我的任务和目标。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-19 11:41:07

有一种方法可以做到。使用array_reduce提取逗号之间提到的所有组名,并使用preg_match_all查找它们:

代码语言:javascript
复制
$groups = array_reduce($group_array, function ($c, $v) { 
    preg_match_all('/,(\w+),/', $v, $matches);
    return array_merge($c, $matches[1]);
}, array());

由于可能存在重复,所以我们通过array_unique传递这个数组,然后创建一个正则表达式来匹配每个值:

代码语言:javascript
复制
$regex = '/^(' . implode('|', array_unique($groups)) . ')\s*:/';

然后使用array_filter处理$group_array中的每个值,删除:左侧在$groups数组中的值:

代码语言:javascript
复制
$group_array = array_filter($group_array, function ($v) use ($groups) {
    return !preg_match($regex, $v);
});

输出:

代码语言:javascript
复制
Array
(
    [1] => managers : managers,staff,company
    [2] => executives : executives,staff,company
    [4] => loyalty members : loyalty members,customers,company
    [5] => non loyalty : non loyalty,customers,company
)

基于3v4l.org的演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58933096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档