2

嗨我有一个数组如下

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

ETC

我有一个像下面这样的变量

$categories = 'bannana, grape';

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

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

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

任何关于从哪里开始的帮助表示赞赏。谢谢

4

3 回答 3

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);

观看现场演示

于 2013-06-13T18:54:53.277 回答
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
于 2013-06-13T18:55:01.807 回答
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/>";
}
于 2013-06-13T18:55:04.337 回答