For the third consecutive year, the Growth 40 leveraged data from market research firm The NPD Group to predict the top large, medium, and small U.S. markets for quick-service restaurant expansion. Rankings this year leverage a proprietary NPD Score, which measures market opportunity by balancing quick-service restaurant density in a market and the difference between traffic growth and population growth. Using this methodology, Southern markets dominated the 2015 Growth 40, comprising one-half of the list. In addition, smaller markets such as Meridian, Mississippi; Alpena, Michigan; and Presque Isle, Maine, secured positions on the top small markets list despite low projected population growth—proof that even stagnant towns across the country have plenty of potential for the restaurant industry.
Click row headers to re-sort the chart.
array( 'sort_dir' => 'asc', 'indicator' => '', 'label' => 'Market Ranking', ), 'dma' => array( 'sort_dir' => 'asc', 'indicator' => '', 'label' => 'Designated Market Areas (DMA)', ), 'division' => array( 'sort_dir' => 'asc', 'indicator' => '', 'label' => 'Census Division', ), 'score' => array( 'sort_dir' => 'asc', 'indicator' => '', 'label' => 'Score', ), 'forecast' => array( 'sort_dir' => 'asc', 'indicator' => '', 'label' => 'QSR Traffic Growth Forecast 2014-2019', ), 'units' => array( 'sort_dir' => 'asc', 'indicator' => '', 'label' => 'QSR Units', ), 'density' => array( 'sort_dir' => 'asc', 'indicator' => '', 'label' => 'Unit Density (Units per 100k population)', ), '2014_pop' => array( 'sort_dir' => 'asc', 'indicator' => '', 'label' => '2014 Population', ), '2019_pop' => array( 'sort_dir' => 'asc', 'indicator' => '', 'label' => 'Projected 2019 Population', ), 'pct_chg' => array( 'sort_dir' => 'asc', 'indicator' => '', 'label' => 'Population Percent Change', ), ); if ( isset( $_GET['sort'] ) && in_array( $_GET['sort'], array_keys( $headers ) ) ) { $sort_field = $_GET['sort']; } else { $sort_field = 'ranking'; } if ( isset( $_GET['dir'] ) && in_array( $_GET['dir'], array( 'asc', 'desc' ) ) ) { $sort_dir = $_GET['dir']; } else { $sort_dir = 'asc'; } $opposite_dir = ( $sort_dir == 'asc' ) ? 'desc' : 'asc'; $headers[$sort_field]['sort_dir'] = $opposite_dir; $headers[$sort_field]['indicator'] = theme_tablesort_indicator( array( 'style' => $sort_dir ) ); $header_cols = array(); foreach ( $headers as $field => $field_data ) { $header_cols[] = array( 'data' => l( $field_data['label'], $_GET['q'], array( 'query' => array( 'sort' => $field, 'dir' => $field_data['sort_dir'] ) ) ) . $field_data['indicator'], 'class' => 'header', ); } $table_rows = array(); $table_rows[] = $header_cols; /* begin of function area */ $sorted_data = array(); $values = array(); foreach ( $the_data as $id => $value ) { $values[$id] = $value->$sort_field; } if ( $sort_dir == 'asc' ) { asort( $values ); } else { arsort( $values ); } foreach ( $values as $key => $value ) { $data_cells = array(); foreach ( $headers as $field => $field_data ) { $cell_data = $the_data[$key]->$field; if ( $field == 'forecast' || $field == 'pct_chg' ) { $cell_data .= '%'; } elseif ( $field == 'units' || $field == '2014_pop' || $field == '2019_pop' ) { $cell_data = number_format( $cell_data ); } $classes = $field; if ( $field == $sort_field ) { $classes .= ' sorted'; } $data_cells[] = array( 'data' => $cell_data, 'class' => $classes ); } $table_rows[] = $data_cells; } /* end of functional area */ print theme( 'table', array( 'header' => array(), 'rows' => $table_rows, 'attributes' => array( 'id' => 'datatable' ) ) ); ?>