Php 用字体替换图像

Php 用字体替换图像,php,replace,font-awesome-4,Php,Replace,Font Awesome 4,我正在尝试更改显示图像以供查看的代码。前面的代码有5个星星的图像。第一张图片有一颗星,下两颗星,依此类推。每个图像的宽度相同,因此对齐总是正确的。使用的代码是 $p_stars = '<img src="images/stars_' . $rating . '.png">'; 我的想法是用令人敬畏的字体图标替换图像,使其更容易控制颜色,如果颜色或星星数需要更改,则需要较少的维护。我这样做了,它工作得很好,但它需要的代码量远远超过图像。因此,我的问题是: 我应该坚持图像吗

我正在尝试更改显示图像以供查看的代码。前面的代码有5个星星的图像。第一张图片有一颗星,下两颗星,依此类推。每个图像的宽度相同,因此对齐总是正确的。使用的代码是

    $p_stars = '<img src="images/stars_' . $rating . '.png">';
我的想法是用令人敬畏的字体图标替换图像,使其更容易控制颜色,如果颜色或星星数需要更改,则需要较少的维护。我这样做了,它工作得很好,但它需要的代码量远远超过图像。因此,我的问题是:

  • 我应该坚持图像吗
  • 有没有更好的方法来编写图标方法的代码
下面是图标方法的代码:

    <style>
    .stars {color:#FB9802;}
    .stars-hide {color:#fff;}
    </style>

    $p_stars  = '';
    $p = 0;
    while ($p < 5) {
        for ($x = 0; $x < $rating; ++$x) {
            $p_stars .= '<i class="fas fa-star stars"></i>';
            $p++;
        }
        if ($p == 5) break;

        for ($x = $p; $x < 5; ++$x) {
            $p_stars .= '<i class="fas fa-star stars-hide"></i>';
            $p++;
        }
    }

.stars{color:#FB9802;}
.星星隐藏{颜色:#fff;}
$p_星='';
$p=0;
而($p<5){
对于($x=0;$x<$rating;++$x){
$p_星。='';
$p++;
}
如果($p==5)中断;
对于($x=$p;$x<5;++$x){
$p_星。='';
$p++;
}
}
我应该坚持图像吗

没有人会为你回答这个问题。你必须自己决定。坚持做任何适合你、你的团队和你的客户的事情。编程中最重要的事情是沟通(至少我是这么认为的)

我将在评论中包括我所写的内容,这是一个非常好的观点:


从标准化和优化方法来看,如果广泛使用字体,那么使用字体非常棒。。。比一系列不同的图像更有益。。。然而,如果它只用于明星,它是一个非常大的资产下载一次使用


有没有更好的方法来编写图标方法的代码

。。。它所需要的代码量远远超过图像

你应该更聪明地工作,而不是更努力地工作:)

如果你研究所有可用的PHP数组函数,你会发现

现在,与我们一起,我们可以创建一段非常优雅且易于维护的代码,它在您的提交中看起来比您已经拥有的要好得多:)

看看这个:

$imageShow = '<i class="fas fa-star stars"></i>';
$imageHide = '<i class="fas fa-star stars-hide"></i>';

$rating = 3;

$stars = array_merge(
    array_fill(0, $rating, $imageShow),
    array_fill($rating, 5-$rating, $imageHide)
    );
    
var_dump($stars);
看到了吗?我将
$rating
设置为
3
,结果数组有3个星星图像和2个隐藏的星星图像

现在,您只需调用
内爆
即可将所有元素连接在一起。我相信,您的生产代码最终会是这样的:

$imageShow = '<i class="fas fa-star stars"></i>';
$imageHide = '<i class="fas fa-star stars-hide"></i>';

$stars = array_merge(
    array_fill(0, $rating, $imageShow),
    array_fill($rating, 5-$rating, $imageHide)
    );

$p_stars = implode("", $stars);
$imageShow='';
$imageHide='';
$stars=阵列\u合并(
数组填充(0,$rating,$imageShow),
数组填充($rating,5-$rating,$imageHide)
);
$p_stars=内爆(“,$stars”);

从标准化和优化方法来看,如果广泛使用字体Awesome,尤其是在图像方面,则使用字体Awesome比使用一系列不同的图像更有益。因为它是一个单独的文件下载,被缓存并在整个站点中使用。想想sprite(包含多个图形的单个图像文件)和不得不下载多个图形。然而,如果它只用于明星,它是一个非常大的资产下载一次使用。至于建议的替换,您可以使用
str\u repeat(“”,$rating)
而不是for循环。
array(5) {
  [0]=>
  string(33) "<i class="fas fa-star stars"></i>"
  [1]=>
  string(33) "<i class="fas fa-star stars"></i>"
  [2]=>
  string(33) "<i class="fas fa-star stars"></i>"
  [3]=>
  string(38) "<i class="fas fa-star stars-hide"></i>"
  [4]=>
  string(38) "<i class="fas fa-star stars-hide"></i>"
}
$imageShow = '<i class="fas fa-star stars"></i>';
$imageHide = '<i class="fas fa-star stars-hide"></i>';

$stars = array_merge(
    array_fill(0, $rating, $imageShow),
    array_fill($rating, 5-$rating, $imageHide)
    );

$p_stars = implode("", $stars);