こんにちは私はこのオブジェクトの配列を持っています
[
{
"id": 1,
"categories": [
222,
243,
208,
115,
173,
253,
236,
121,
69,
250,
221,
270,
245,
123,
124
]
},
{
"id": 2,
"categories": [
222,
243,
208,
69,
250,
221,
270,
245,
123,
124
]
},{
"id": 8774,
"categories": [
222,
243,
208,
115,
173,
253,
236,
121
]
}
]
他の配列のすべてのオブジェクト値の「categories」配列を検索して、一致するものを出力したいと思います。
例、配列にプッシュした値222
と値を検索したい121
$array = ("222","121");
そして、結果でこの2つの値を検索し、一致するものであるため、オブジェクトID = 1と8774のみを出力します。
array_filterを使用してforeachをテストしましたが、動作します。何か案が?ありがとう
これは私のコードです
$search = array("231","228");
$result = array_filter($array, function ($item) use ($search) {
if (array_intersect($item["categories"], $search)) {
return true;
}
return false;
});
//$array is the array of object result
Array_intersectは機能しますが、値を含むオブジェクトのみを「検索」配列に出力する必要があります。「検索」配列は3つ以上の値を持つことができることを考慮して
array_intersect($array1, $array2)
2つの配列の間に一致がある場合は真実になります。のすべてのカテゴリを持つアイテムのみを選択したいようです$search
。それをテストするには、を使用する必要があります
if (count(array_intersect($item["categories"], $search)) == count($search))
また、一般的に書面で意味がありません
if (condition) {
return true;
} else {
return false;
}
書くだけ:
return condition;
したがって、次のようになります。
$result = array_filter($array, function ($item) use ($search) {
return count(array_intersect($item["categories"], $search)) == count($search);
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加