我有一个包含200多个项目的大型JSON文件。其中有5组数据。每组至少有30个项目。我使用"p" tag
区分它们,就像json数据中的"p":"1","p":"2","p":"3","p":"4","p":"5"
一样。现在我希望从每个组中获得2个项目,并且随机订单共计10个项目。
为了便于解释,我设置了一些简单的数据,如下所示。 “p”:“1”在其组中有4个项目,“p”:“2”在其组中有4个项目。
现在如何使用随机订单从"p":"1"
和"p":"2"
获取2个项目?
$json = <<<ETO
[
{
"a":"apple",
"p":"1"
},
{
"a":"orange",
"p":"1"
},
{
"a":"pear",
"p":"1"
},
{
"a":"banana",
"p":"1"
},
{
"a":"Chauli",
"p":"2"
},
{
"a":"Carrot",
"p":"2"
},
{
"a":"Lettuce",
"p":"2"
},
{
"a":"Potato",
"p":"2"
}
]
ETO;
$data = json_decode($json);
shuffle($data);// some shuffle like this is very ugly...
foreach($data as $row){
$aoo = 1;
$boo = 1;
if($row->p==1){
echo $row->p.': '.$row->a.'<br />';
$aoo++;
if($aoo==2){
break;
}
}
if($row->p==2){
echo $row->p.': '.$row->b.'<br />';
$boo++;
if($boo==2){
break;
}
}
}
我需要得到如下结果:
orange ("p":"1") Carrot ("p":"2") pear ("p":"1") Lettuce ("p":"2")
Lettuce ("p":"2") banana ("p":"1") Apple ("p":"1") Chauli ("p":"2")
总而言之,获得2种蔬菜和2种水果混合订单。感谢。
答案 0 :(得分:6)
$values = json_decode($json, true);
$grouped = array();
foreach ($values as $value) {
$grouped[$value['p']][] = $value;
}
$chosen = array();
foreach ($grouped as $group) {
$keys = array_rand($group, 2);
$chosen = array_merge($chosen, array_intersect_key($group, array_flip($keys)));
}
shuffle($chosen);
答案 1 :(得分:3)
重新排列数据,使您的数组看起来像
1 =&gt;阵列(苹果,橙子,梨子......), 2 =&gt;阵列(Chauli,Carrot,Potato), 3 =&GT; ...
通过array_rand