如何从数组中过滤特定值?

时间:2013-06-13 18:47:52

标签: php arrays loops

嗨我有一个数组如下

 "data": [
{
  "title": "title1",
  "category": "apple"
},
{
  "title": "title2",
  "category": "bannana"
}, 
{
  "title": "title3",
  "category": "grape"
}
]

我有一个类似下面的

$categories = 'bannana, grape';

我有一个循环遍历数据并提取所有标题。

我想要实现的是一个循环,它将遍历数组并且只提取类别与$ categories变量中的一个值匹配的标题。

所以在这种情况下,title1将被忽略,因为它在apple类别中。但title2和title3将被添加到一个新数组或放入一个字符串等

任何有关从何处开始的帮助表示赞赏。感谢

3 个答案:

答案 0 :(得分:2)

简单

$categories = 'bannana, grape';
$categories = array_flip(array_map("trim", explode(",", $categories)));

$data = array_filter($data, function ($v) use($categories) {
    return isset($categories[$v['category']]);
});
var_dump($data);

See Live DEMO

答案 1 :(得分:1)

您需要做的只是explode data数组,并使用in_array验证标题是否包含您的某个类别,请参阅以下内容:

PHP示例

$categories = "banana, grape";
$data = [
    [
        'title' => 'title1',
        'category' => 'apple',
    ],
    [
        'title' => 'title2',
        'category' => 'banana',
    ],
    [
        'title' => 'title3',
        'category' => 'grape',
    ],
];

$category_map = explode(", ", $categories);

foreach($data as $title) {
    if(in_array($title['category'], $category_map)) {
        echo $title['category'] . PHP_EOL;
    }
}

示例返回

banana
grape

答案 2 :(得分:0)

要使用闭包过滤数组,请使用array_filter。

$categoriesArray = explode(",", $categories);
$filtered = array_filter($data, function($a) use ($categoriesArray){
     return in_array($a["category"], $categoriesArray);
});

foreach($filtered as $topic){
      echo $topic["category"]."<br/>";
}