如何使用 php 方法分隔和样式匹配计数器数字


How do I separate and style hit counter digits with php methods?

我正在使用这个PHP代码来获取和显示我网站的访问者数量(点击计数器)。目前,它被设置为在单个块中显示该数字,即 - 我想在其自己的 html 标签中显示每个数字,以便以不同的方式设置每个数字的样式。

我已经尝试过爆炸,并在 var $allHits上进行 substr,但没有得到很好的结果。有什么想法吗?

<?
/*----------------------------
-------- ++ simPHP ++ --------
A simple PHP hit counter.
Description:
   simPHP counts both regular and unique views on multiple
   webpages. The stats can be displayed on any PHP-enabled
   webpage. You MUST have read/write permissions on files.
Script by Ajay: ajay@scyberia.org
http://scyberia.org
----------------------------*/

/*----------CONFIG----------*/
// NOTE: If you change any config after using simphp,
// remove the old files.
// Relative URL of text file that holds hit info:
$lf_name = "hits.txt";
// Save new log file each month
//   0 = No
//   1 = Yes
$monthly = 1;
// Path to store old files:
// Default for June, 2012:
//   oldfiles/6-12.txt
$monthly_path = "oldfiles";
// Count unique hits or all hits:
//   0 = All hits
//   1 = Unique hits
//   2 = Both
$type = 2;
// Text to display
// before all hits.
$beforeAllText = "Site Visitors: ";
// Before unique hits.
$beforeUniqueText = "Unique Visits: ";
// Display hits on this page:
//   0 = No
//   1 = Yes
$display = 1;
// Only change this if you are recording both values.
// Separator for unique and all hits display - use HTML tags! (line break is default)
$separator = "<br '>";
// Default would output:
//   Visits: 10
//   Unique Visits: 10
/*--------------------------*/



/*--------BEGIN CODE--------*/
$log_file = dirname(__FILE__) . '/' . $lf_name;
//Check for "?display=true" in URL.
if ($_GET['display'] == "true") {
    //Show include() info.
    die("<pre>&#60;? include('"" . dirname(__FILE__) . '/' . basename(__FILE__) . "'"); ?&#62;</pre>");
} else {
    //Visit or IP.
    $uIP = $_SERVER['REMOTE_ADDR'];
    //Check for "hits.txt" file.
    if (file_exists($log_file)) {
        //Check if today is first day of month
        if (date('j') == 10) {
            //Ensure that monthly dir exists
            if (!file_exists($monthly_path)) {
                mkdir($monthly_path);
            }
            //Check if prev month log file exists already
            $prev_name = $monthly_path . '/' . date("n-Y", strtotime("-1 month"));
            if (!file_exists($prev_name)) {
                //If not, move/rename current file
                copy($log_file, $prev_name);
                //Create new $toWrite based on CONFIG
                //Write file according to CONFIG above.
                if ($type == 0) {
                    $toWrite = "1";
                    $info = $beforeAllText . "1";
                } else if ($type == 1) {
                    $toWrite = "1;" . $uIP . ",";
                    $info = $beforeUniqueText . "1";
                } else if ($type == 2) {
                    $toWrite = "1;1;" . $uIP . ",";
                    $info = $beforeAllText . "1" . $separator . $beforeUniqueText . "1";
                }
                goto write_logfile;
            }
        } 
        //Get contents of "hits.txt" file.
        $log = file_get_contents($log_file);
        //Get type from CONFIG above.
        if ($type == 0) {
            //Create info to write to log file and info to show.
            $toWrite = intval($log) + 1;
            $info = $beforeAllText . $toWrite;
        } else if ($type == 1) {
            //Separate log file into hits and IPs.
            $hits = reset(explode(";", $log));
            $IPs = end(explode(";", $log));
            $IPArray = explode(",", $IPs);
            //Check for visitor IP in list of IPs.
            if (array_search($uIP, $IPArray, true) === false) {
                //If doesnt' exist increase hits and include IP.
                $hits = intval($hits) + 1;
                $toWrite = $hits . ";" . $IPs . $uIP . ",";
            } else {
                //Otherwise nothing.
                $toWrite = $log;
            }
            //Info to show.
            $info = $beforeUniqueText . $hits;
        } else if ($type == 2) {
            //Position of separators.
            $c1Pos = strpos($log, ";");
            $c2Pos = strrpos($log, ";");
            //Separate log file into regular hits, unique hits, and IPs.
            $pieces = explode(";", $log);
            $allHits = $pieces[0];
            $uniqueHits = $pieces[1];
            $IPs = $pieces[2];
            $IPArray = explode(",", $IPs);
            //Increase regular hits.
            $allHits = intval($allHits) + 1;
            //Search for visitor IP in list of IPs.
            if (array_search($uIP, $IPArray, true) === false) {
                //Increase ONLY unique hits and append IP.
                $uniqueHits = intval($uniqueHits) + 1;
                $toWrite = $allHits . ";" . $uniqueHits . ";" . $IPs . $uIP . ",";
            } else {
                //Else just include regular hits.
                $toWrite = $allHits . ";" . $uniqueHits . ";" . $IPs;
            }
            //Info to show.
            $info = $beforeAllText . $allHits . $separator . $beforeUniqueText . $uniqueHits;
        }
    } else {
        //If "hits.txt" doesn't exist, create it.
        $fp = fopen($log_file ,"w");
        fclose($fp);
        //Write file according to CONFIG above.
        if ($type == 0) {
            $toWrite = "1";
            $info = $beforeAllText . "1";
        } else if ($type == 1) {
            $toWrite = "1;" . $uIP . ",";
            $info = $beforeUniqueText . "1";
        } else if ($type == 2) {
            $toWrite = "1;1;" . $uIP . ",";
            $info = $beforeAllText . "1" . $separator . $beforeUniqueText . "1";
        }
    }
    write_logfile:
    //Put $toWrite in log file
    file_put_contents($log_file, $toWrite);
    //Display info if is set in CONFIG.
    if ($display == 1) {
    }
}

使用 foreach 循环会起作用吗,如下所示:

$array_allHits = explode(" ",$allHits);
foreach ($array_allHits as $display_digits) {
        echo $display_digits[0];
}
你可以

使用 for 循环。

for ($i = 0; $i < strlen((string) $allHits); $i++) {
    echo '<span>' . $allHits[$i] . '</span>';
}

上面的代码将为命中计数中的每个数字输出<span>{number}</span>。它将遍历字符串中的每个字符,类似于数组索引的处理方式。

$totalHits = 125655;
foreach(str_split((string)$totalHits) as $key => $val) {
    echo "<span class='position_{$key}'>{$val}</span>";
}

在 css 中添加样式,如下所示:

.position_0 {
    color: red;
}
.position_1 {
    color: blue;
}
.position_2 {
    color: yellow;
}