PHP如果循环是最有效的方式吗?

时间:2016-08-26 08:22:40

标签: php loops if-statement

我在这里有一个if语句,它完全符合我的要求。它循环一些值,例如sop_01到sop_06并用br分隔它们的输出。我想知道这是否是编写此代码的最有效方式,对我来说它似乎不是很有效,例如如果值从sop_01变为sop_1000会发生什么,你不会手动写出来吗?

if (TRIM($row['sop_01']) <> null){
    $sop = TRIM($row['sop_01']);
    if (TRIM($row['sop_02']) <> ""){
        $sop = $sop . "<br>" . TRIM($row['sop_02']);
        if (TRIM($row['sop_03']) <> ""){
            $sop = $sop . "<br>" . TRIM($row['sop_03']);
            if (TRIM($row['sop_04']) <> ""){
                $sop = $sop . "<br>" . TRIM($row['sop_04']);
                if (TRIM($row['sop_05']) <> ""){
                    $sop = $sop . "<br>" . TRIM($row['sop_05']);
                    if (TRIM($row['sop_06']) <> ""){
                        $sop = $sop . "<br>" . TRIM($row['sop_06']);
                    }
                }
            }
        }
    }
} else { $sop = "hello world"; }

一些背景信息;如果sop_01为null,那么所有其他值将为null

如果sop_01 is <> null有可能其他值为“”或具有值

如果sop_02 is empty它不为空,则为“”(由于数据如何存储在数据库中)

如果我能提供任何进一步的信息,请告诉我

Bepster

4 个答案:

答案 0 :(得分:2)

您可以尝试使用一些内置的 PHP 函数 -

$row = array_map('trim', $row); // trim all the values present
if ($row['sop_01'] <> null) {

    $temp = array_filter($row); // will remove all the empty, null ...

    $sop = implode('<br>', $temp); // concatenate the values with <br>

} else { 
    $sop = "hello world"; 
}

假设$row仅包含这些值(string s)。如果没有,您可以将它们存储在array中并完成剩下的工作。

array_filter()array_map()

答案 1 :(得分:2)

首先创建一个包含要使用的所有键的数组。然后以这种方式操纵数组:

 // create array with "allowed" keys, btw. you can convert it into a loop :)
 $keys = array_flip(array('sop_01', 'sop_02', 'sop_03', 'sop_04', 'sop_05', 'sop_06'));
 // take only items with keys of array $keys
 $sop = array_intersect_key($row, $keys);
 // will call the function `trim` on every item of the array
 $sop = array_map('trim', $sop);
 // will remove all empty strings
 $sop = array_filter($sop);
 // will join all items of the array with a `<br>` between them.
 $sop = implode('<br>', $sop);

如果你需要这个Hello world字符串,如果行是&#34;空&#34;你可以添加这一行:

 $sop = empty($sop) ? 'Hello world' : $sop;

要使用循环创建$keys数组,请使用此

$keys = array();
$i = 1;
while(isset($row['sop_'.$i])){
  $keys['sop_'.$i++] = true;
}

它将创建一个数组,具体取决于多少&#34;字段&#34;匹配sop_%d数组的模式$row(从1开始的行)。 (这句话是否正确?

答案 2 :(得分:2)

动态使用for循环和构建索引。

$start = 1;
$end = count($row);
$sop = '';
for ($i = $start; $i <= $end; $i++) {
    $num = ($i < 10) ? '0' . $i : $i;
    $index = 'sop_' . $num;
    if (TRIM($row[$index]) <> "") {
        $sop = $sop . "<br>" . TRIM($row[$index]);
    }
}

答案 3 :(得分:0)

此代码适用于1000或更多值 -

<?php
$rows = count($row);
$i  = 2;
$sop = "";
if (TRIM($row['sop_01']) <> null){
    $sop = $sop . TRIM($row['sop_01']);
    get_soap($rows, $i, $sop);
} else { $sop = "hello world"; }

function get_soap($rows, $i, $sop){

    if($i <= $rows){

        if (TRIM($row['sop_'.$i]) <> "")
            $sop = $sop . "<br>" . TRIM($row['sop_'.$i]);

        $i++;
        get_soap($rows ,$i, $sop);
    }  
}
?>