views:

719

answers:

4

I've got the following JSON:

{
"row": [
 {
 "sort":3,
 "type":"fat",
 "widgets":
  [
   {"values": [3,9] },
   {"values": [8,4] }     
  ]
 },
{
 "sort":2,
 "type":"three",
 "widgets":
 [
  {"values": [3,4] },
  {"values": [12,7] },
  {"values": [12,7] }       
 ]
}      
]
}

And this PHP to output it:

foreach ( $value->row as $therow )
{
 echo "<div class='row ".$therow->type."'>";

 foreach ( $therow->widgets as $thewidgets )
 {
  echo "<div class='widget'>";
  echo $thewidgets->values[0];
  echo "</div>";

 }

 echo "</div>";

}

What I would like to do is sort the ouput based on the sort value in the JSON, any ideas?

A: 

See following if you want to do it on client side.

http://stackoverflow.com/questions/881510/json-sorting-question/881987#881987

Tahir Akhtar
+1  A: 

Use usort:

function my_sort($a, $b)
{
    if ($a->sort < $b->sort) {
        return -1;
    } else if ($a->sort > $b->sort) {
        return 1;
    } else {
        return 0;
    }
}

usort($value->row, 'my_sort');
Tobias Cohen
+1  A: 

See here:

http://stackoverflow.com/questions/777597/sorting-an-associative-array-in-php/777625

for user-defined sorting.

Stefan Gehrig
A: 

Just sort the data before printing it in the second foreach loop:

foreach ($value->row as $therow) {
    if ($therow->sort == 2) {
        // sort $therow->widgets according to whatever sort 2 means
    } elseif ($therow->sort == 3) {
        // sort $therow->widgets according to whatever sort 3 means
    }
    echo "<div class='row ".$therow->type."'>";
    foreach ($therow->widgets as $thewidgets) {
        echo "<div class='widget'>";
        echo $thewidgets->values[0];
        echo "</div>";
    }
    echo "</div>";
}
Gumbo