仅根据需要在PHP数组中添加项

仅根据需要在PHP数组中添加项,php,loops,Php,Loops,我想在我的站点中加入一些代码,并在之后使用设计之外的“flairs”(divs)设置一个空间。代码如下: //Add Flair Containers as needed if($flairs>0){ echo "<!--Flair Graphics (if needed)-->\n"; while($fQty = --$flairs+1){ //-- subracts 1, +1 accounts for 1 being 0 $flair = arr

我想在我的站点中加入一些代码,并在
之后使用设计之外的“flairs”(divs)设置一个空间。代码如下:

//Add Flair Containers as needed
if($flairs>0){
  echo "<!--Flair Graphics (if needed)-->\n";
    while($fQty = --$flairs+1){ //-- subracts 1, +1 accounts for 1 being 0
       $flair = array($flair1, $flair2, $flair3);
        foreach($flair as $flairCode){
          echo "<div id=\"flair-".$fQty++."\">".$flairCode."</div>\n";
        };
    };
};
//根据需要添加Flair容器
如果($flairs>0){
回音“\n”;
虽然($fQty=--$flairs+1){/--subracts 1,+1说明1为0
$flair=阵列($flair1,$flair2,$flair3);
foreach($flair作为$flairCode){
回显“$flairCode”。\n”;
};
};
};
它可以正确打印,其中content=$flair1、$flair2,依此类推

<div id="flair-1">Content1</div>
<div id="flair-2">Content2</div>
<div id="flair-3">Content3</div>
Content1
内容2
内容3

但是,如果$flair2/$flair3为空,它仍会打印一个div。如何解决此问题?

foreach
循环中,您可以检查该值是否为,如果为,则跳到下一个值

像这样:

if($flairs>0){
  echo "<!--Flair Graphics (if needed)-->\n";
    while($fQty = --$flairs+1){ //-- subracts 1, +1 accounts for 1 being 0
       $flair = array($flair1, $flair2, $flair3);
        foreach($flair as $flairCode){
          if (empty($flairCode)) continue;
          echo "<div id=\"flair-".$fQty++."\">".$flairCode."</div>\n";
        };
    };
};
if($flairs>0){
回音“\n”;
虽然($fQty=--$flairs+1){/--subracts 1,+1说明1为0
$flair=阵列($flair1,$flair2,$flair3);
foreach($flair作为$flairCode){
如果(空($flairCode))继续;
回显“$flairCode”。\n”;
};
};
};

我想你可以简单地在echo语句前面加上
if($flairCode)
。这将使您的内部循环:

foreach($flair as $flairCode){
    if($flairCode) echo "<div id=\"flair-".$fQty++."\">".$flairCode."</div>\n";
};
foreach($flair作为$flairCode){
如果($flairCode)回显“$flairCode”。\n”;
};
需要注意的几点:

  • 由于
    $flair
    数组始终是相同的,因此在循环之外构造它(这将使您也只对条件进行一次评估)
  • 使用
    $fQty++
    不足以保证ID的唯一性,特别是因为每次它在
    时碰到
    时,值都会被重置。我建议
    $fQty
    不应成为
    时的
    条件的一部分,而应作为独立的计数保留
  • 不要用双引号,它们很慢

那么,
$fQty=-$flairs+1
是什么使$flairs总是相同的呢?例如,如果$flairs是5,则使其成为4和+1 5?对于您的问题,即使
$flair2
/
$flair3
为空,
$flair
仍然是一个包含元素的数组(至少使用
$flair1
,更不用说
null
仍然构成元素),因此,
foreach
仍在运行。@Passenger是的,我知道会的,我只是想不出一种方法来检查它是否存在。@nullpointer+1只是让值正确打印出来。可能有更好的方法,但效果很好。如果要包含换行符(\n),则需要双引号。此外,如果双引号与单引号存在的话,其性能影响可以忽略不计。请参阅。酷。我尽可能使用单引号,但我希望我的最终代码看起来不错。在我成为程序员之前,我是一名设计师,所以这对我很重要。可以使用
PHP\u EOL
(这给出了特定于平台的行结尾,因此我认为它无论如何都更好).至于单引号和双引号,这些数字对我来说是新的。上次我运行基准测试时,单引号的运行速度始终快了1-2%。我将看看是否无法从服务器和命令行重新运行他的应用程序,并查看弹出的内容。我会说,因为他是手动连接的,而且他正在逃避双引号为了做到这一点,我认为如果他使用单引号,他的代码的格式会更好。