В php массив по умолчанию является ассоциативным, поэтому у вас такое поведение, так как порядок ассоциативного массива не гарантируется (согласно объяснению в ссылке, приведенной в benedict_w).
Чтобы преодолеть это, вы можетепопробуйте следующее:
echo json_encode(array_values($user_data));
Это эффективно превратит ваш JSON из
["10":{prop1:val1, prop2:val2}, "25":{prop1:val1, prop2:val2}]
в
[{prop1:val1, prop2:val2}, {prop1:val1, prop2:val2}]
Если вам нужно отслеживать идентификатор, поставьтеэто внутри ваших user_data в вашем php:
if(!isset($user_data[$user_id]){
$user_data[$user_id] = array(
'id' => $user_id,
'first_name' => $row['first_name'],
'last_name' => $row['last_name'],
'dept' => $row['dept'],
'quals' => array()
);
}