嗨我有一个数组如下
"data": [
{
"title": "title1",
"category": "apple"
},
{
"title": "title2",
"category": "bannana"
},
{
"title": "title3",
"category": "grape"
}
]
等
我有一个类似下面的
$categories = 'bannana, grape';
我有一个循环遍历数据并提取所有标题。
我想要实现的是一个循环,它将遍历数组并且只提取类别与$ categories变量中的一个值匹配的标题。
所以在这种情况下,title1将被忽略,因为它在apple类别中。但title2和title3将被添加到一个新数组或放入一个字符串等
任何有关从何处开始的帮助表示赞赏。感谢
答案 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);
答案 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/>";
}