2

こんにちは、私は以下のような配列を持っています

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

以下のような変数があります

$categories = 'bannana, grape';

データを実行してすべてのタイトルを抽出するループがあります。

私が達成しようとしているのは、配列を通過し、カテゴリが $categories 変数の値のいずれかと一致するタイトルのみを抽出するループです。

したがって、この場合、title1 はカテゴリ apple にあるため無視されます。ただし、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

必要なのはexplodedata配列を使用in_arrayして、タイトルにカテゴリの 1 つが含まれていることを確認することだけです。以下を参照してください。

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 に答える