<?php

$topics = array(
  array('name' => 'n1', 'timestamp' => 5000, 'children' => array()),
  array('name' => 'n2', 'timestamp' => 4000, 'children' => array(
    array('name' => 'n3', 'timestamp' => 6000, 'children' => array()),
    array('name' => 'n4', 'timestamp' => 2000, 'children' => array(
      array('name' => 'n5', 'timestamp' => 4000, 'children' => array()),
      array('name' => 'n6', 'timestamp' => 3000, 'children' => array())
    )), 
  )),
  array('name' => 'n7', 'timestamp' => 1000, 'children' => array())
);

function sortRecurse(&$array) {
    usort($array, function($a, $b) {
        return $a['timestamp'] - $b['timestamp'];
    });
    foreach ($array as &$subarray) {
        sortRecurse($subarray['children']);
    }
}
sortRecurse($topics);
print_r($topics);