$json = <<<EOT
[
{"album":"album1","truck":"truck1"},
{"album":"album1","truck":"truck3"},
{"album":"album1","truck":"truck4"},
{"album":"album1","truck":"truck6"},
{"album":"album2","truck":"truck2"},
{"album":"album2","truck":"truck3"},
{"album":"album3","truck":"truck2"},
{"album":"album3","truck":"truck5"}
{"album":"album4","truck":"truck5"},
{"album":"album4","truck":"truck6"},
{"album":"album5","truck":"truck1"},
{"album":"album5","truck":"truck3"},
{"album":"album6","truck":"truck2"},
{"album":"album6","truck":"truck3"},
{"album":"album6","truck":"truck4"},
{"album":"album7","truck":"truck2"},
{"album":"album7","truck":"truck5"},
{"album":"album7","truck":"truck6"}
]
EOT;
$data = json_decode($json);
foreach($data as $row){
//echo '唱片:'.$row->album.' ,曲目:'.$row->truck.'<br />';
}
有一个json格式的数组。储存唱片专辑及曲目。
如何随机取出4个唱片,每个唱片取出一首曲目,且这4首曲目名不重复?(album为唱片,truck为曲目。)
[
{"album":"album1","truck":"truck1"},
{"album":"album1","truck":"truck3"},
{"album":"album1","truck":"truck4"},
{"album":"album1","truck":"truck6"},
{"album":"album2","truck":"truck2"},
{"album":"album2","truck":"truck3"},
{"album":"album3","truck":"truck2"},
{"album":"album3","truck":"truck5"}
{"album":"album4","truck":"truck5"},
{"album":"album4","truck":"truck6"},
{"album":"album5","truck":"truck1"},
{"album":"album5","truck":"truck3"},
{"album":"album6","truck":"truck2"},
{"album":"album6","truck":"truck3"},
{"album":"album6","truck":"truck4"},
{"album":"album7","truck":"truck2"},
{"album":"album7","truck":"truck5"},
{"album":"album7","truck":"truck6"}
]
EOT;
$data = json_decode($json);
foreach($data as $row){
//echo '唱片:'.$row->album.' ,曲目:'.$row->truck.'<br />';
}
有一个json格式的数组。储存唱片专辑及曲目。
如何随机取出4个唱片,每个唱片取出一首曲目,且这4首曲目名不重复?(album为唱片,truck为曲目。)
[
{"album":"album1","truck":"truck1"},
{"album":"album1","truck":"truck3"},
{"album":"album1","truck":"truck4"},
{"album":"album1","truck":"truck6"},
{"album":"album2","truck":"truck2"},
{"album":"album2","truck":"truck3"},
{"album":"album3","truck":"truck2"},
{"album":"album3","truck":"truck5"}, //少了个逗号!!
{"album":"album4","truck":"truck5"},
{"album":"album4","truck":"truck6"},
{"album":"album5","truck":"truck1"},
{"album":"album5","truck":"truck3"},
{"album":"album6","truck":"truck2"},
{"album":"album6","truck":"truck3"},
{"album":"album6","truck":"truck4"},
{"album":"album7","truck":"truck2"},
{"album":"album7","truck":"truck5"},
{"album":"album7","truck":"truck6"}
]
EOT;
$data = json_decode($json);$ar = array_rand($data, 4);
foreach($ar as $k) {
echo '唱片:'.$data[$k]->album.' ,曲目:'.$data[$k]->truck.'<br />';
}
或者也可以用shuffle()函数打乱$data数组,然后取前4或尾4个元素。
唱片:album1 ,曲目:truck6
唱片:album3 ,曲目:truck2
唱片:album4 ,曲目:truck6
唱片:album6 ,曲目:truck3
注意:很明显单纯使用array_rand(),会出现上述情况,2次truck6。
而我需要所有的truck不重复。如何进一步检索?谢谢。
$data = json_decode($json);shuffle($data);
foreach(array_slice($data, -4) as $v)
echo '唱片:'.$v->album.' ,曲目:'.$v->truck.'<br />';
$obj_lastItem = array('album' => '', 'truck' => '');$counter = 0;while($counter < 4) {
while ($data[0]->album == $obj_lastItem['album'] && $data[0]->truck == $obj_lastItem['truck']) shuffle($data);
$obj_lastItem['album'] = $data[0]->album;
$obj_lastItem['truck'] = $data[0]->truck;
echo "唱片:{$obj_lastItem['album']}, 曲目:{$obj_lastItem['truck']}<br />";
$counter ++;
}
而是他原始的数据有重复,需要做去重处理
$data = json_decode($json);
foreach($data as $v) $r[$v->truck] = $v;
$data = $r;
$ar = array_rand($data, 4);
foreach($ar as $k) {
echo '唱片:'.$data[$k]->album.' ,曲目:'.$data[$k]->truck.'<br />';
}