-1

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

编辑:进一步解释:$keywords 是一个数组,其中包含从文本中提取的大量单个单词。在 $text 我想把我可以使用相邻单词创建的引理。假设我的原始文本是“我喜欢青苹果”,在 $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];    
    }
4

1 回答 1

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
)
*/

此代码应适用于任意长度的数组。

于 2012-08-31T21:51:25.257 回答