我有这个JSON数据:
<div class="parent nr1">
<div class="child">Sample 1
</div>
<div class="child nr2">
</div>
</div>
<div class="parent nr2">
<div class="child">Sample 2
</div>
<div class="child nr2">
</div>
</div>
<div class="parent nr3">
<div class="child">Sample 3
</div>
<div class="child nr2">
</div>
</div>
如何对数据格式进行排序。
[{"make":"Cadillac","model":"Escalade","year":"2006"},{"make":"Cadillac","model":"Escalade","year":"2005"},{"make":"Cadillac","model":"Escalade","year":"2004"},{"make":"Cadillac","model":"Escalade","year":"2003"},{"make":"Cadillac","model":"Escalade","year":"2002"},{"make":"Cadillac","model":"Escalade ESV","year":"2006"},{"make":"Cadillac","model":"Escalade ESV","year":"2005"},{"make":"Cadillac","model":"Escalade ESV","year":"2004"},{"make":"Cadillac","model":"Escalade ESV","year":"2003"},{"make":"Cadillac","model":"Escalade EXT","year":"2006"},{"make":"Cadillac","model":"Escalade EXT","year":"2005"},{"make":"Cadillac","model":"Escalade EXT","year":"2004"},{"make":"Cadillac","model":"Escalade EXT","year":"2003"},{"make":"Cadillac","model":"Escalade EXT","year":"2002"},{"make":"Chevrolet","model":"Astro","year":"2005"},{"make":"Chevrolet","model":"Astro","year":"2004"},{"make":"Chevrolet","model":"Astro","year":"2003"},{"make":"Chevrolet","model":"Avalanche 1500","year":"2006"},{"make":"Chevrolet","model":"Avalanche 1500","year":"2005"}]
我对PHP仍然非常新鲜,所以我很难弄清楚如何实现这一目标并删除重复项以及通过连接添加年份。
谢谢,
答案 0 :(得分:0)
你必须用循环解析它。一个简单的版本看起来像:
$cars = json_decode($cars_json);
$carList = array();
foreach($cars as $car){
if(!isset($carList[$car->make . $car->model])){
$carList[$car->make . $car->model] = array(
'firstYear' => $car->year,
'lastYear' => $car->year,
'make'=>$car->make,
'model' => $car->model,
}
else{
if($car->year < $carList[$car->make . $car->model]['firstYear'])
$carList[$car->make . $car->model]['firstYear'] = $car->year;
else if($car->year > $carList[$car->make . $car->model]['lastYear'])
$carList[$car->make . $car->model]['lastYear'] = $car->year;
}
}
//Parsing complete, now output
foreach($carList as $car){
echo $car['make'] . " ";
echo $car['model'] . " ";
echo substr($car['firstYear'],-2) . "-" . substr($car['lastYear'], -2);
}
答案 1 :(得分:0)
$data = json_decode('[{"make":"Cadillac","model":"Escalade","year":"2006"},{"make":"Cadillac","model":"Escalade","year":"2005"},{"make":"Cadillac","model":"Escalade","year":"2004"},{"make":"Cadillac","model":"Escalade","year":"2003"},{"make":"Cadillac","model":"Escalade","year":"2002"},{"make":"Cadillac","model":"Escalade ESV","year":"2006"},{"make":"Cadillac","model":"Escalade ESV","year":"2005"},{"make":"Cadillac","model":"Escalade ESV","year":"2004"},{"make":"Cadillac","model":"Escalade ESV","year":"2003"},{"make":"Cadillac","model":"Escalade EXT","year":"2006"},{"make":"Cadillac","model":"Escalade EXT","year":"2005"},{"make":"Cadillac","model":"Escalade EXT","year":"2004"},{"make":"Cadillac","model":"Escalade EXT","year":"2003"},{"make":"Cadillac","model":"Escalade EXT","year":"2002"},{"make":"Chevrolet","model":"Astro","year":"2005"},{"make":"Chevrolet","model":"Astro","year":"2004"},{"make":"Chevrolet","model":"Astro","year":"2003"},{"make":"Chevrolet","model":"Avalanche 1500","year":"2006"},{"make":"Chevrolet","model":"Avalanche 1500","year":"2005"}]');
// Organize by make and model
foreach ($data as $row) {
$organized[$row->make][$row->model][] = $row->year;
}
// Output.
foreach ($organized as $make => $models) {
foreach ($models as $model => $years) {
sort($years);
// Use first value as range.
$range = array_shift($years);
// If there are more years, create a range.
if (count($years)) {
// Use last value as end of range.
$range .= '-' . array_pop($years);
}
// Print formatted line with tabs.
echo $make, "\t", $model, "\t", $range, "\n";
}
}
输出:
Cadillac Escalade 2002-2006
Cadillac Escalade ESV 2003-2006
Cadillac Escalade EXT 2002-2006
Chevrolet Astro 2003-2005
Chevrolet Avalanche 1500 2005-2006
在第一个$organized
中创建的 foreach
是一个多维数组,如下所示:
Array
(
[Cadillac] => Array
(
[Escalade] => Array
(
[0] => 2006
[1] => 2005
[2] => 2004
[3] => 2003
[4] => 2002
)
[Escalade ESV] => Array
(
[0] => 2006
[1] => 2005
[2] => 2004
[3] => 2003
)
[Escalade EXT] => Array
(
[0] => 2006
[1] => 2005
[2] => 2004
[3] => 2003
[4] => 2002
)
)
[Chevrolet] => Array
(
[Astro] => Array
(
[0] => 2005
[1] => 2004
[2] => 2003
)
[Avalanche 1500] => Array
(
[0] => 2006
[1] => 2005
)
)
)