【问题标题】:how to filter specific values out of an array?如何从数组中过滤特定值?
【发布时间】:2013-06-13 18:47:51
【问题描述】:

你好,我有一个数组如下

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

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

$categories = 'bannana, grape';

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

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

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

感谢您从哪里开始提供任何帮助。谢谢

【问题讨论】:

  • 说,这不是banana吗? 只是说 ;-) 它会为您节省一次按键操作。
  • explode() 是你的关键函数,它将帮助你将字符串转换为数组,然后很容易检查值是否在数组中。

标签: php arrays loops


【解决方案1】:

简单

$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

【讨论】:

  • 如果您有大量的类别和数据,最好的答案。
【解决方案2】:

您需要做的就是explodedata 数组并使用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

【讨论】:

  • (+1) banana 的正确拼写。你只需要喜欢减少击键method()。干杯 ;-) 现在我饿了。所有这些关于食物的话题,让我想去给我做水果沙拉!
【解决方案3】:

要过滤数组,请使用带有闭包的 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/>";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2015-01-07
    相关资源
    最近更新 更多