title: PHP Warning: number_format() expects parameter 1 to be float
body: <p>Can you please someone help me with this code I got </p>
  
  <blockquote>
    <p>PHP Warning:  number_format() expects parameter 1 to be float, string given in line 39</p>
  </blockquote>
  
  <p>I am copied the whole class I hope that will help you better to find the problem.</p>
  
  <pre><code>   class stats_site extends stats {
        function __construct() {
          global $CONF, $DB, $FORM, $LNG, $TMPL;
  
      $TMPL['header'] = $LNG['stats_header'];
  
      $TMPL['username'] = $DB-&gt;escape($FORM['u'], 1);
  
      $stats = $DB-&gt;fetch("SELECT * FROM {$CONF['sql_prefix']}_stats WHERE username = '{$TMPL['username']}'", __FILE__, __LINE__);
      unset($stats['username']);
  
      $sites = array($DB-&gt;fetch("SELECT * FROM {$CONF['sql_prefix']}_sites WHERE username = '{$TMPL['username']}'", __FILE__, __LINE__));
      if ($stats) {
        $TMPL = array_merge($TMPL, $stats, $sites);
  
        $TMPL['unq_pv_max_daily'] = $TMPL['unq_pv_0_daily'] &gt; $TMPL['unq_pv_max_daily'] ? $TMPL['unq_pv_0_daily'] : $TMPL['unq_pv_max_daily'];
        $TMPL['tot_pv_max_daily'] = $TMPL['tot_pv_0_daily'] &gt; $TMPL['tot_pv_max_daily'] ? $TMPL['tot_pv_0_daily'] : $TMPL['tot_pv_max_daily'];
        $TMPL['unq_in_max_daily'] = $TMPL['unq_in_0_daily'] &gt; $TMPL['unq_in_max_daily'] ? $TMPL['unq_in_0_daily'] : $TMPL['unq_in_max_daily'];
        $TMPL['tot_in_max_daily'] = $TMPL['tot_in_0_daily'] &gt; $TMPL['tot_in_max_daily'] ? $TMPL['tot_in_0_daily'] : $TMPL['tot_in_max_daily'];
        $TMPL['unq_out_max_daily'] = $TMPL['unq_out_0_daily'] &gt; $TMPL['unq_out_max_daily'] ? $TMPL['unq_out_0_daily'] : $TMPL['unq_out_max_daily'];
        $TMPL['tot_out_max_daily'] = $TMPL['tot_out_0_daily'] &gt; $TMPL['tot_out_max_daily'] ? $TMPL['tot_out_0_daily'] : $TMPL['tot_out_max_daily'];
        $TMPL['unq_pv_max_weekly'] = $TMPL['unq_pv_0_weekly'] &gt; $TMPL['unq_pv_max_weekly'] ? $TMPL['unq_pv_0_weekly'] : $TMPL['unq_pv_max_weekly'];
        $TMPL['tot_pv_max_weekly'] = $TMPL['tot_pv_0_weekly'] &gt; $TMPL['tot_pv_max_weekly'] ? $TMPL['tot_pv_0_weekly'] : $TMPL['tot_pv_max_weekly'];
        $TMPL['unq_in_max_weekly'] = $TMPL['unq_in_0_weekly'] &gt; $TMPL['unq_in_max_weekly'] ? $TMPL['unq_in_0_weekly'] : $TMPL['unq_in_max_weekly'];
        $TMPL['tot_in_max_weekly'] = $TMPL['tot_in_0_weekly'] &gt; $TMPL['tot_in_max_weekly'] ? $TMPL['tot_in_0_weekly'] : $TMPL['tot_in_max_weekly'];
        $TMPL['unq_out_max_weekly'] = $TMPL['unq_out_0_weekly'] &gt; $TMPL['unq_out_max_weekly'] ? $TMPL['unq_out_0_weekly'] : $TMPL['unq_out_max_weekly'];
        $TMPL['tot_out_max_weekly'] = $TMPL['tot_out_0_weekly'] &gt; $TMPL['tot_out_max_weekly'] ? $TMPL['tot_out_0_weekly'] : $TMPL['tot_out_max_weekly'];
        $TMPL['unq_pv_max_monthly'] = $TMPL['unq_pv_0_monthly'] &gt; $TMPL['unq_pv_max_monthly'] ? $TMPL['unq_pv_0_monthly'] : $TMPL['unq_pv_max_monthly'];
        $TMPL['tot_pv_max_monthly'] = $TMPL['tot_pv_0_monthly'] &gt; $TMPL['tot_pv_max_monthly'] ? $TMPL['tot_pv_0_monthly'] : $TMPL['tot_pv_max_monthly'];
        $TMPL['unq_in_max_monthly'] = $TMPL['unq_in_0_monthly'] &gt; $TMPL['unq_in_max_monthly'] ? $TMPL['unq_in_0_monthly'] : $TMPL['unq_in_max_monthly'];
        $TMPL['tot_in_max_monthly'] = $TMPL['tot_in_0_monthly'] &gt; $TMPL['tot_in_max_monthly'] ? $TMPL['tot_in_0_monthly'] : $TMPL['tot_in_max_monthly'];
        $TMPL['unq_out_max_monthly'] = $TMPL['unq_out_0_monthly'] &gt; $TMPL['unq_out_max_monthly'] ? $TMPL['unq_out_0_monthly'] : $TMPL['unq_out_max_monthly'];
        $TMPL['tot_out_max_monthly'] = $TMPL['tot_out_0_monthly'] &gt; $TMPL['tot_out_max_monthly'] ? $TMPL['tot_out_0_monthly'] : $TMPL['tot_out_max_monthly'];
  
        $this-&gt;averages();
  
        $TMPL['average_rating'] = $TMPL['num_ratings'] &gt; 0 ? round($TMPL['total_rating'] / $TMPL['num_ratings'], 0) : 0;
  
        $stats = array_map('number_format', $stats);
        $TMPL = array_merge($TMPL, $stats);
  
        $this-&gt;locale();
  
        $TMPL['header'] .= " - {$TMPL['title']}";
        $TMPL['category_url'] = urlencode($TMPL['category']);
  
        $query = "SELECT id, date, review FROM {$CONF['sql_prefix']}_reviews WHERE username = '{$TMPL['username']}' AND active = 1";
        if (isset($FORM['all_reviews']) &amp;&amp; $FORM['all_reviews']) {
          $result = $DB-&gt;query("{$query} ORDER BY date DESC", __FILE__, __LINE__);
        }
        else {
          $result = $DB-&gt;select_limit("{$query} ORDER BY RAND()", 2, 0, __FILE__, __LINE__);
        }
        $TMPL['reviews'] = '';
        while (list($TMPL['id'], $TMPL['date'], $TMPL['review']) = $DB-&gt;fetch_array($result)) {
          $TMPL['reviews'] .= $this-&gt;do_skin('stats_review');
        }
  
        $TMPL['content'] = $this-&gt;do_skin('stats');
      }
      else {
        $this-&gt;error($LNG['g_invalid_u']);
      }
    }
  }
  </code></pre>
  
  <p>And line 39 is this line here:</p>
  
  <pre><code>$stats = array_map('number_format', $stats);
  </code></pre>
  
  <p>Many thanks in advance!</p>
  
  <p><strong>EDIT</strong></p>
  
  <p>I've  put here THE FULL CODE so you can better fix the problem with it.
  I tried everything you advice here but it doesn't help :(</p>
  
  <p>Here is the full code:</p>
  
  <pre><code>&lt;?php
  
  if (!defined('ATSPHP')) {
    die("This file cannot be accessed directly.");
  }
  
  class stats extends base {
    function __construct() {
      global $FORM;
  
      if (isset($FORM['u'])) { $stats = new stats_site; }
      else { $stats = new stats_overall; }
    }
  
    function averages() {
      global $TMPL;
  
      $ranking_periods = array('daily', 'weekly', 'monthly');
      $ranking_methods = array('unq_pv', 'tot_pv', 'unq_in', 'tot_in', 'unq_out', 'tot_out');
      foreach ($ranking_periods as $ranking_period) {
        foreach ($ranking_methods as $ranking_method) {
          $TMPL["{$ranking_method}_avg_{$ranking_period}"] = 0;
          for ($i = 0; $i &lt; 10; $i++) {
            $TMPL["{$ranking_method}_avg_{$ranking_period}"] = $TMPL["{$ranking_method}_avg_{$ranking_period}"] + $TMPL["{$ranking_method}_{$i}_{$ranking_period}"];
          }
          $TMPL["{$ranking_method}_avg_{$ranking_period}"] = number_format($TMPL["{$ranking_method}_avg_{$ranking_period}"] / 10, 1);
        }
      }
    }
  
    function locale() {
      global $CONF, $LNG, $TMPL;
  
      setlocale(LC_ALL, $CONF['default_language']);
      for ($i = 2; $i &lt; 10; $i++) {
        $TMPL["{$i}_daily"] = strftime('%B %d', time()-3600*24*$i + (3600*$CONF['time_offset']));
      }
      for ($i = 2; $i &lt; 10; $i++) {
        $TMPL["{$i}_weekly"] = "{$LNG['stats_week']} ".date('W', time()-3600*24*7*$i + (3600*$CONF['time_offset']));
      }
      for ($i = 2; $i &lt; 10; $i++) {
        $TMPL["{$i}_monthly"] = strftime('%B %y', mktime(0, 0, 0, date('m')-$i, 1));
      }
    }
  }
  
  class stats_site extends stats {
    function __construct() {
      global $CONF, $DB, $FORM, $LNG, $TMPL;
  
      $TMPL['header'] = $LNG['stats_header'];
  
      $TMPL['username'] = $DB-&gt;escape($FORM['u'], 1);
  
      $stats = $DB-&gt;fetch("SELECT * FROM {$CONF['sql_prefix']}_stats WHERE username = '{$TMPL['username']}'", __FILE__, __LINE__);
      unset($stats['username']);
  
      $sites = array($DB-&gt;fetch("SELECT * FROM {$CONF['sql_prefix']}_sites WHERE username = '{$TMPL['username']}'", __FILE__, __LINE__));
      if ($stats) {
        $TMPL = array_merge($TMPL, $stats, $sites);
  
        $TMPL['unq_pv_max_daily'] = $TMPL['unq_pv_0_daily'] &gt; $TMPL['unq_pv_max_daily'] ? $TMPL['unq_pv_0_daily'] : $TMPL['unq_pv_max_daily'];
        $TMPL['tot_pv_max_daily'] = $TMPL['tot_pv_0_daily'] &gt; $TMPL['tot_pv_max_daily'] ? $TMPL['tot_pv_0_daily'] : $TMPL['tot_pv_max_daily'];
        $TMPL['unq_in_max_daily'] = $TMPL['unq_in_0_daily'] &gt; $TMPL['unq_in_max_daily'] ? $TMPL['unq_in_0_daily'] : $TMPL['unq_in_max_daily'];
        $TMPL['tot_in_max_daily'] = $TMPL['tot_in_0_daily'] &gt; $TMPL['tot_in_max_daily'] ? $TMPL['tot_in_0_daily'] : $TMPL['tot_in_max_daily'];
        $TMPL['unq_out_max_daily'] = $TMPL['unq_out_0_daily'] &gt; $TMPL['unq_out_max_daily'] ? $TMPL['unq_out_0_daily'] : $TMPL['unq_out_max_daily'];
        $TMPL['tot_out_max_daily'] = $TMPL['tot_out_0_daily'] &gt; $TMPL['tot_out_max_daily'] ? $TMPL['tot_out_0_daily'] : $TMPL['tot_out_max_daily'];
        $TMPL['unq_pv_max_weekly'] = $TMPL['unq_pv_0_weekly'] &gt; $TMPL['unq_pv_max_weekly'] ? $TMPL['unq_pv_0_weekly'] : $TMPL['unq_pv_max_weekly'];
        $TMPL['tot_pv_max_weekly'] = $TMPL['tot_pv_0_weekly'] &gt; $TMPL['tot_pv_max_weekly'] ? $TMPL['tot_pv_0_weekly'] : $TMPL['tot_pv_max_weekly'];
        $TMPL['unq_in_max_weekly'] = $TMPL['unq_in_0_weekly'] &gt; $TMPL['unq_in_max_weekly'] ? $TMPL['unq_in_0_weekly'] : $TMPL['unq_in_max_weekly'];
        $TMPL['tot_in_max_weekly'] = $TMPL['tot_in_0_weekly'] &gt; $TMPL['tot_in_max_weekly'] ? $TMPL['tot_in_0_weekly'] : $TMPL['tot_in_max_weekly'];
        $TMPL['unq_out_max_weekly'] = $TMPL['unq_out_0_weekly'] &gt; $TMPL['unq_out_max_weekly'] ? $TMPL['unq_out_0_weekly'] : $TMPL['unq_out_max_weekly'];
        $TMPL['tot_out_max_weekly'] = $TMPL['tot_out_0_weekly'] &gt; $TMPL['tot_out_max_weekly'] ? $TMPL['tot_out_0_weekly'] : $TMPL['tot_out_max_weekly'];
        $TMPL['unq_pv_max_monthly'] = $TMPL['unq_pv_0_monthly'] &gt; $TMPL['unq_pv_max_monthly'] ? $TMPL['unq_pv_0_monthly'] : $TMPL['unq_pv_max_monthly'];
        $TMPL['tot_pv_max_monthly'] = $TMPL['tot_pv_0_monthly'] &gt; $TMPL['tot_pv_max_monthly'] ? $TMPL['tot_pv_0_monthly'] : $TMPL['tot_pv_max_monthly'];
        $TMPL['unq_in_max_monthly'] = $TMPL['unq_in_0_monthly'] &gt; $TMPL['unq_in_max_monthly'] ? $TMPL['unq_in_0_monthly'] : $TMPL['unq_in_max_monthly'];
        $TMPL['tot_in_max_monthly'] = $TMPL['tot_in_0_monthly'] &gt; $TMPL['tot_in_max_monthly'] ? $TMPL['tot_in_0_monthly'] : $TMPL['tot_in_max_monthly'];
        $TMPL['unq_out_max_monthly'] = $TMPL['unq_out_0_monthly'] &gt; $TMPL['unq_out_max_monthly'] ? $TMPL['unq_out_0_monthly'] : $TMPL['unq_out_max_monthly'];
        $TMPL['tot_out_max_monthly'] = $TMPL['tot_out_0_monthly'] &gt; $TMPL['tot_out_max_monthly'] ? $TMPL['tot_out_0_monthly'] : $TMPL['tot_out_max_monthly'];
  
        $this-&gt;averages();
  
        $TMPL['average_rating'] = $TMPL['num_ratings'] &gt; 0 ? round($TMPL['total_rating'] / $TMPL['num_ratings'], 0) : 0;
        function formatter($stats) { return number_format(floatval($stats)); }
        $stats = array_map('number_format', $stats);
        //$stats = array_map(function($v){return is_numeric($v) ? number_format($v) : $v;}, $stats);
        $TMPL = array_merge($TMPL, $stats);
  
        $this-&gt;locale();
  
        $TMPL['header'] .= " - {$TMPL['title']}";
        $TMPL['category_url'] = urlencode($TMPL['category']);
  
        $query = "SELECT id, date, review FROM {$CONF['sql_prefix']}_reviews WHERE username = '{$TMPL['username']}' AND active = 1";
        if (isset($FORM['all_reviews']) &amp;&amp; $FORM['all_reviews']) {
          $result = $DB-&gt;query("{$query} ORDER BY date DESC", __FILE__, __LINE__);
        }
        else {
          $result = $DB-&gt;select_limit("{$query} ORDER BY RAND()", 2, 0, __FILE__, __LINE__);
        }
        $TMPL['reviews'] = '';
        while (list($TMPL['id'], $TMPL['date'], $TMPL['review']) = $DB-&gt;fetch_array($result)) {
          $TMPL['reviews'] .= $this-&gt;do_skin('stats_review');
        }
  
        $TMPL['content'] = $this-&gt;do_skin('stats');
      }
      else {
        $this-&gt;error($LNG['g_invalid_u']);
      }
    }
  }
  
  class stats_overall extends stats {
    function __construct() {
      global $CONF, $DB, $FORM, $LNG, $TMPL;
  
      $TMPL['header'] = $LNG['stats_overall'];
  
      $stats = $DB-&gt;fetch("SELECT SUM(unq_pv_overall), SUM(tot_pv_overall), SUM(unq_in_overall), SUM(tot_in_overall), SUM(unq_out_overall), SUM(tot_out_overall),
                           SUM(unq_pv_0_daily), SUM(unq_pv_1_daily), SUM(unq_pv_2_daily), SUM(unq_pv_3_daily), SUM(unq_pv_4_daily), SUM(unq_pv_5_daily), SUM(unq_pv_6_daily), SUM(unq_pv_7_daily), SUM(unq_pv_8_daily), SUM(unq_pv_9_daily), SUM(tot_pv_0_daily), SUM(tot_pv_1_daily), SUM(tot_pv_2_daily), SUM(tot_pv_3_daily), SUM(tot_pv_4_daily), SUM(tot_pv_5_daily), SUM(tot_pv_6_daily), SUM(tot_pv_7_daily), SUM(tot_pv_8_daily), SUM(tot_pv_9_daily),
                           SUM(unq_in_0_daily), SUM(unq_in_1_daily), SUM(unq_in_2_daily), SUM(unq_in_3_daily), SUM(unq_in_4_daily), SUM(unq_in_5_daily), SUM(unq_in_6_daily), SUM(unq_in_7_daily), SUM(unq_in_8_daily), SUM(unq_in_9_daily), SUM(tot_in_0_daily), SUM(tot_in_1_daily), SUM(tot_in_2_daily), SUM(tot_in_3_daily), SUM(tot_in_4_daily), SUM(tot_in_5_daily), SUM(tot_in_6_daily), SUM(tot_in_7_daily), SUM(tot_in_8_daily), SUM(tot_in_9_daily),
                           SUM(unq_out_0_daily), SUM(unq_out_1_daily), SUM(unq_out_2_daily), SUM(unq_out_3_daily), SUM(unq_out_4_daily), SUM(unq_out_5_daily), SUM(unq_out_6_daily), SUM(unq_out_7_daily), SUM(unq_out_8_daily), SUM(unq_out_9_daily), SUM(tot_out_0_daily), SUM(tot_out_1_daily), SUM(tot_out_2_daily), SUM(tot_out_3_daily), SUM(tot_out_4_daily), SUM(tot_out_5_daily), SUM(tot_out_6_daily), SUM(tot_out_7_daily), SUM(tot_out_8_daily), SUM(tot_out_9_daily),
                           SUM(unq_pv_0_weekly), SUM(unq_pv_1_weekly), SUM(unq_pv_2_weekly), SUM(unq_pv_3_weekly), SUM(unq_pv_4_weekly), SUM(unq_pv_5_weekly), SUM(unq_pv_6_weekly), SUM(unq_pv_7_weekly), SUM(unq_pv_8_weekly), SUM(unq_pv_9_weekly), SUM(tot_pv_0_weekly), SUM(tot_pv_1_weekly), SUM(tot_pv_2_weekly), SUM(tot_pv_3_weekly), SUM(tot_pv_4_weekly), SUM(tot_pv_5_weekly), SUM(tot_pv_6_weekly), SUM(tot_pv_7_weekly), SUM(tot_pv_8_weekly), SUM(tot_pv_9_weekly),
                           SUM(unq_in_0_weekly), SUM(unq_in_1_weekly), SUM(unq_in_2_weekly), SUM(unq_in_3_weekly), SUM(unq_in_4_weekly), SUM(unq_in_5_weekly), SUM(unq_in_6_weekly), SUM(unq_in_7_weekly), SUM(unq_in_8_weekly), SUM(unq_in_9_weekly), SUM(tot_in_0_weekly), SUM(tot_in_1_weekly), SUM(tot_in_2_weekly), SUM(tot_in_3_weekly), SUM(tot_in_4_weekly), SUM(tot_in_5_weekly), SUM(tot_in_6_weekly), SUM(tot_in_7_weekly), SUM(tot_in_8_weekly), SUM(tot_in_9_weekly),
                           SUM(unq_out_0_weekly), SUM(unq_out_1_weekly), SUM(unq_out_2_weekly), SUM(unq_out_3_weekly), SUM(unq_out_4_weekly), SUM(unq_out_5_weekly), SUM(unq_out_6_weekly), SUM(unq_out_7_weekly), SUM(unq_out_8_weekly), SUM(unq_out_9_weekly), SUM(tot_out_0_weekly), SUM(tot_out_1_weekly), SUM(tot_out_2_weekly), SUM(tot_out_3_weekly), SUM(tot_out_4_weekly), SUM(tot_out_5_weekly), SUM(tot_out_6_weekly), SUM(tot_out_7_weekly), SUM(tot_out_8_weekly), SUM(tot_out_9_weekly),
                           SUM(unq_pv_0_monthly), SUM(unq_pv_1_monthly), SUM(unq_pv_2_monthly), SUM(unq_pv_3_monthly), SUM(unq_pv_4_monthly), SUM(unq_pv_5_monthly), SUM(unq_pv_6_monthly), SUM(unq_pv_7_monthly), SUM(unq_pv_8_monthly), SUM(unq_pv_9_monthly), SUM(tot_pv_0_monthly), SUM(tot_pv_1_monthly), SUM(tot_pv_2_monthly), SUM(tot_pv_3_monthly), SUM(tot_pv_4_monthly), SUM(tot_pv_5_monthly), SUM(tot_pv_6_monthly), SUM(tot_pv_7_monthly), SUM(tot_pv_8_monthly), SUM(tot_pv_9_monthly),
                           SUM(unq_in_0_monthly), SUM(unq_in_1_monthly), SUM(unq_in_2_monthly), SUM(unq_in_3_monthly), SUM(unq_in_4_monthly), SUM(unq_in_5_monthly), SUM(unq_in_6_monthly), SUM(unq_in_7_monthly), SUM(unq_in_8_monthly), SUM(unq_in_9_monthly),  SUM(tot_in_0_monthly), SUM(tot_in_1_monthly), SUM(tot_in_2_monthly), SUM(tot_in_3_monthly), SUM(tot_in_4_monthly), SUM(tot_in_5_monthly), SUM(tot_in_6_monthly), SUM(tot_in_7_monthly), SUM(tot_in_8_monthly), SUM(tot_in_9_monthly),
                           SUM(unq_out_0_monthly), SUM(unq_out_1_monthly), SUM(unq_out_2_monthly), SUM(unq_out_3_monthly), SUM(unq_out_4_monthly), SUM(unq_out_5_monthly), SUM(unq_out_6_monthly), SUM(unq_out_7_monthly), SUM(unq_out_8_monthly), SUM(unq_out_9_monthly), SUM(tot_out_0_monthly), SUM(tot_out_1_monthly), SUM(tot_out_2_monthly), SUM(tot_out_3_monthly), SUM(tot_out_4_monthly), SUM(tot_out_5_monthly), SUM(tot_out_6_monthly), SUM(tot_out_7_monthly), SUM(tot_out_8_monthly), SUM(tot_out_9_monthly)
                           FROM {$CONF['sql_prefix']}_stats", __FILE__, __LINE__);
  
      // Get rid of SUM() in array keys
      foreach ($stats as $key =&gt; $value) {
        $new_key = str_replace(array('SUM(', ')'), '', $key);
        $stats[$new_key] = $value;
        unset($stats[$key]);
      }
  
      $TMPL = array_merge($TMPL, $stats);
  
      $this-&gt;averages();
  
      $stats = array_map('number_format', $stats);
      $TMPL = array_merge($TMPL, $stats);
  
      $this-&gt;locale();
  
      $TMPL['content'] = $this-&gt;do_skin('stats_overall');
    }
  }
  ?&gt;
  </code></pre>
  
  <p>Error happen at line 85:</p>
  
  <pre><code>$stats = array_map('number_format', $stats);
  </code></pre>
  
  <hr>
  
  <p>Latest Error after using Miken32's Answer:</p>
  
  <blockquote>
    <p>PHP Notice: Undefined index: title in sources/stats.php on line 91 <br>
    PHP Notice: Undefined index: category in sources/stats.php on line 92 <br>
    PHP Notice: Undefined index: title in sources/misc/skin.php(84) : runtime-created function on line 1  <br>
    PHP Notice: Undefined index: url in sources/misc/ etc.</p>
  </blockquote>