这段代码有效,但它太冗长了,我如何缩短它?

时间:2012-08-31 21:41:24

标签: php

这段代码实际上有效,但有点过于冗长,我想缩小它但我找不到解决方案......

编辑:进一步说明:$ keywords是一个数组,其中包含从文本中提取的大量单个单词。在$ text中我想把我可以使用相邻单词创建的al lemmas。假设我的原始文本是“我喜欢青苹果”,在$ keywords中我有“我”,“喜欢”,“绿色”,“苹果”。在$ text中我会有“我喜欢”,“我喜欢绿色”,“我喜欢青苹果”......

for ($i=0;$i<=count($keywords);$i++) {
        $text[] = $keywords[$i];
        $text[] = $keywords[$i]." ".$keywords[$i+1];
        $text[] = $keywords[$i]." ".$keywords[$i+1]." ".$keywords[$i+2];
        $text[] = $keywords[$i]." ".$keywords[$i+1]." ".$keywords[$i+2]." ".$keywords[$i+3];
        $text[] = $keywords[$i]." ".$keywords[$i+1]." ".$keywords[$i+2]." ".$keywords[$i+3]." ".$keywords[$i+4];
        $text[] = $keywords[$i]." ".$keywords[$i+1]." ".$keywords[$i+2]." ".$keywords[$i+3]." ".$keywords[$i+4]." ".$keywords[$i+5];
        $text[] = $keywords[$i]." ".$keywords[$i+1]." ".$keywords[$i+2]." ".$keywords[$i+3]." ".$keywords[$i+4]." ".$keywords[$i+5]." ".$keywords[$i+6];    
    }

1 个答案:

答案 0 :(得分:2)

您必须使用两个for循环才能创建这样的列表:

<?php

$keywords = explode(' ', 'k1 k2 k3 k4 k5 k6 k7');
$text = array();

for ($i = 0; $i < count($keywords); $i++) {
        $line = array();

        for ($j = 0; $j <= $i; $j++) {
                $line[] = $keywords[$j];
        }

        $text[] = implode(' ', $line);
}

print_r($text);

/*
Array
(
    [0] => k1
    [1] => k1 k2
    [2] => k1 k2 k3
    [3] => k1 k2 k3 k4
    [4] => k1 k2 k3 k4 k5
    [5] => k1 k2 k3 k4 k5 k6
    [6] => k1 k2 k3 k4 k5 k6 k7
)
*/

此代码应与任意长度数组一起使用。