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

时间:2011-12-21 12:11:36

标签: php arrays cdn fopen

我之前写的这段代码。它检查外部服务器是否有图像,如果存在,它将回显列表中的图像。我有最多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>';
}

5 个答案:

答案 0 :(得分:5)

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>';
   }
}

答案 1 :(得分:2)

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

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

你现在在CDN上加载了两倍的负载。如果您需要隐藏某些<li>元素,如果图像丢失,请使用Javascript删除图像,如果图像无法加载。

假定URL为“... number ...”的代码:

<?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>';
}
?>

答案 2 :(得分:1)

是的,您可以使用列表。

一个好主意是用for:

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

然后你可以阅读它:

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

在此内部,您必须测试这是您服务器上的图像,并显示它。 但你不应该使用fopen。对于很多resae。

首先你使用@因为你想要对此有任何Wrning,如果你有警告,你正在做wring,并且php正在尝试为你改变它。 Taht是你干净代码的工作。 但更重要的是,fopen根据文件打开创建一个ressource。然后在此页面中创建14个资源!它们将在页面末尾被破坏,因为你永远不会关闭它。

有一个php函数,它是:file_exitsts。 Taht是适合你的人:

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

答案 3 :(得分:0)

虽然您可以使此代码更清晰,但您无法加快速度。 从外部服务器检查图像本身是一个可怕的想法,它总是很慢。仅仅因为它是外部服务器。

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

答案 4 :(得分:-1)

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>':'');
}
假设文件确实以数字

命名,那么

会做到这一点