如果逗号分隔的列值包含指定值,则仅保留二维数组的行

问题描述 投票:0回答:4

我有以下多维数组。

$arr = array(
    0 => array(
        'id' => 1,
        'title' => 'title1',
        'url' => 'http://www.foo.bar/',
        'blurb' => 'blurb1',
        'custodian' => 'custodia1',
        'tags' => 'tag1',
        'active' => 'Y',
    ),
    1 => array(
        'id' => '2',
        'title' => 'title2',
        'url' => 'http://www.foo.bar/',
        'blurb' => 'blurb2',
        'custodian' => 'custodia2',
        'tags' => 'tag1,tag2',
        'active' => 'Y',
    ),
    2 => array(
        'id' => '3',
        'title' => 'title3',
        'url' => 'http://www.foo.bar/',
        'blurb' => 'blurb3',
        'custodian' => 'custodia3',
        'tags' => 'tag1,tag2,tag3',
        'active' => 'Y',
    ),
);

我需要过滤数组,以便仅显示标签值中带有“tag2”的数组。

我看过

array_filter
,但就是无法理解它。

这是我的尝试,但根本不起作用。不知道我做错了什么。

$filterArr = array_filter($arr, function($tag) {

   return ($tag['tags'] == 'tag2');

});
php arrays multidimensional-array filter partial-matches
4个回答
2
投票

最简单的方法是使用 foreach 循环并在循环体中检查“tag2”

如果您需要删除标签中没有 tag2 的所有行,您可以使用下一个循环:

foreach ($arr as $key => $value) {
    if (!preg_match('/\btag2\b/',$value['tags'])) {
        unset($arr[$key]);
    }
}

2
投票

您可以使用 array_filter 并提供正确的回调

$result = array_filter($arr,function($t){
    return in_array('tag2',explode(',',$t['tags']));
});

2
投票

array_filter 获取数组的每个元素并将其传递给指定的函数,在该函数中您需要返回 true 或 false,如果应该保留则返回 true,如果应该过滤掉则返回 false

使用

explode
in_array
检查 tag2

$filteredArray = array_filter($arr, "filterTag");

function filterTag($arrayElement) {
   return in_array("tag2",explode(",",$arrayElement["tags"]));
}

您的尝试不起作用,因为您的某些“标签”包含

tags2
以外的其他单词,例如
tag1,tag2,tag3
进行简单的
==
比较不会在一个字符串中搜索另一个字符串


0
投票
$resultArr = array();
foreach($arr as $curr)
{

$tagsData = explode(',',$curr['tags']);
if(in_array('tag1',$tagsData)
   $resultArr[] = $curr;



}

$resultArr 是结果数组,其中包含带有 tag1 的标签的数组

© www.soinside.com 2019 - 2024. All rights reserved.