-1

このコードは実際には機能しますが、少し冗長すぎます。縮小したいのですが、解決策が見つかりません...

編集:詳細説明:$ keyswordsは、テキストから抽出された多数の単一の単語を含む配列です。$ textに、隣接する単語を使用して作成できる見出語を入れたいと思います。私の元のテキストが「私は青リンゴが好き」であるとしましょう。$keywordsには「I」、「like」、「green」、「apples」があります。$ 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

このようなリストを作成するには、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 に答える