繁体   English   中英

PHP-如何更清晰,更快地编写此IF和ELSE语句

[英]PHP - How can I write this IF and ELSE statement cleaner and faster

我以前写的这段代码。 它检查外部服务器上是否有图像,如果存在,它将在列表中回显该图像。 我最多有13条记录要检查。 我认为这里最好使用数组,但不确定它们如何工作。

    $a1="".$cdnurl."assets/".$pid."/1/medium.jpg";
              $a2="".$cdnurl."assets/".$pid."/2/medium.jpg";
              $a3="".$cdnurl."assets/".$pid."/3/medium.jpg";
              $a4="".$cdnurl."assets/".$pid."/4/medium.jpg";
              $a5="".$cdnurl."assets/".$pid."/5/medium.jpg";
              $a6="".$cdnurl."assets/".$pid."/6/medium.jpg";
              $a7="".$cdnurl."assets/".$pid."/7/medium.jpg";
              $a8="".$cdnurl."assets/".$pid."/8/medium.jpg";
              $a9="".$cdnurl."assets/".$pid."/9/medium.jpg";
              $a10="".$cdnurl."assets/".$pid."/10/medium.jpg";
              $a11="".$cdnurl."assets/".$pid."/11/medium.jpg";
              $a12="".$cdnurl."assets/".$pid."/12/medium.jpg";
              $a13="".$cdnurl."assets/".$pid."/13/medium.jpg";
              if(@fopen($a1,"r")){
                  echo '<li class="royalSlide"><img src="'.$a1.'" alt="" /></li>';
            }
if(@fopen($a2,"r")){echo '<li class="royalSlide"><img src="'.$a2.'" alt="" /></li>';
}
if(@fopen($a3,"r")){echo '<li class="royalSlide"><img src="'.$a3.'" alt="" /></li>';
}
if(@fopen($a4,"r")){echo '<li class="royalSlide"><img src="'.$a4.'" alt="" /></li>';
}
if(@fopen($a5,"r")){echo '<li class="royalSlide"><img src="'.$a5.'" alt="" /></li>';
}
if(@fopen($a6,"r")){echo '<li class="royalSlide"><img src="'.$a6.'" alt="" /></li>';
}
if(@fopen($a7,"r")){echo '<li class="royalSlide"><img src="'.$a7.'" alt="" /></li>';
}
if(@fopen($a8,"r")){echo '<li class="royalSlide"><img src="'.$a8.'" alt="" /></li>';
}
if(@fopen($a9,"r")){echo '<li class="royalSlide"><img src="'.$a9.'" alt="" /></li>';
}
if(@fopen($a10,"r")){echo '<li class="royalSlide"><img src="'.$a10.'" alt="" /></li>';
}
if(@fopen($a11,"r")){echo '<li class="royalSlide"><img src="'.$a11.'" alt="" /></li>';
}
if(@fopen($a12,"r")){echo '<li class="royalSlide"><img src="'.$a12.'" alt="" /></li>';
}
for ($i = 1; $i < 14; $i++)
{
   $elem = $cdnurl . "assets/" . $pid . "/$i/medium.jpg";
   if(is_readable($elem))
   {
      echo '<li class="royalSlide"><img src="'.$elem.'" alt="" /></li>';
   }
}

使用foreach循环不会使其更快,但会使它看起来更干净。

您的设计是错误的,您不必在每次页面加载时都检查资产是否存在。 使脚本生成HTML并加载该HTML,而不是每次都连接到CDN。

您现在要在CDN上增加两倍的负载。 如果在缺少图像时需要隐藏某些<li>元素,请在图像加载失败时使用Javascript删除该元素。

假设使用类似“ ... number ...”之类的URL的代码:

<?php
foreach (range(0, 13) as $number) {
    $url = $cdnurl . "assets/$pid/$number/medium.jpg";
    echo '<li class="royalSlide">
        <img src="' . $url . '" onerror="parentNode.parentNode.removeChild(parentNode)" alt="" />
    </li>';
}
?>

此代码是您问题中代码的增强:

<?php
foreach (range(0, 13) as $number) {
    $url = $cdnurl . "assets/$pid/$number/medium.jpg";
    // skip URLs which cannot be found
    if (!file_exists($url)) continue;

    echo '<li class="royalSlide">
        <img src="' . $url . '" alt="" />
    </li>';
}
?>

是的,您可以使用列表。

一个好主意是使用for创建它:

$a = array();
for($i = 0; î < 14; ++$i)
{
    $a[] = $cdnurl."assets/".$pid."/".$i."/medium.jpg";
}

然后,您可以阅读它:

foreach($a as $tmpA) 
{
...
}

在其中,您必须测试这是否是服务器上的映像,并显示它。 但是您不应该使用fopen。 对于大量的resae。

起初,您使用@是因为您不想对此进行任何Wrning,如果您有警告说您正在做绞拧,而php会尝试为您更改它。 拥有清晰的代码是您的工作。 但更重要的是,fopen基于打开的文件创建资源。 然后在此页面中创建14个资源! 而且由于您永远不会关闭它们,它们将在页面末尾销毁。

有一个PHP函数是:file_exitsts。 泰铢最适合您:

foreach($a as $tmpA) 
{
    if (file_exists($filename)) 
    {
        echo '<li class="royalSlide"><img src="'.$tmpA.'" alt="" /></li>';
    }
}

尽管可以使此代码更简洁,但不能使其更快。 从外部服务器检查图像本身就是一个糟糕的主意,而且总是很慢。 只是因为它是外部服务器。

我想知道是否有任何理由检查每个图像是否存在。 他们变化如此快吗?

for($i=1;i<=13;i++){
  $item =$cdnurl.'assets/'.$pid.'/'.$i.'/'.medium.jpg;
  echo (@fopen($item,'r')?'<li class="royalSlide"><img src="'.$item.'" alt="" /></li>':'');
}

假设文件确实是按数字命名的,将可以解决问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM