我有这段代码可以完成搜索选项名称的工作,如何使用它从数组中搜索选项值。
$productspp ='[{
"id": 4674388066436,"title": "1st march","options": [{
"id": 6046836162692,"product_id": 4674388066436,"name": "Size","position": 1,"values": ["12","24","36"]
},{
"id": 6067871875204,"name": "z","position": 2,"values": ["blue","green"]
},{
"id": 6067871907972,"name": "Material","position": 3,"values": ["silk","cotton"]
}],},{
"id": 4674394325124,"title": "2nd march","options": [{
"id": 6046844190852,"product_id": 4674394325124,"name": "Title","values": ["Default Title"]
}],{
"id": 4679851704452,"title": "3rd marchhh","options": [{
"id": 6053112545412,"product_id": 4679851704452,"values": ["Default Title"]
}]
}]';
$array = json_decode($productspp,1);
$filter_name555 ='options';
$dummytstt ='values';
$filter_value= blue;
$expected = array_filter($array,function($el) use ($filter_name555,$dummytstt,$filter_value) {
return ( stripos($el[$filter_name555][0][$dummytstt],$filter_value) !== false );
}
});
如果用户搜索了option_value并且匹配,则应列出该产品,因此在这种情况下,如果用户搜索Silk,则应列出该产品,否则就不列出
对于选项名称,它适用于选项值,它不起作用,因为stripos期望它是字符串,但是在数据中,它是数组。
我们也尝试了in_array进行过滤,但这也没有效果
当我们搜索12或24或36或蓝色或绿色之类的内容时,它应该列出json的这一部分。我的意思是该产品和上面给出的代码相同,只是选项名称相同。您可以看到选项值是数组。它可以有多个值,所以我的代码失败了。
{
"id": 4674388066436,}