3

我的目标是创建一个由三个随机单词组成的句子,这些单词将从 CSV 文件的列中提取。

我无法让 PHP 仅从正确的列中选择单词,因此第一列包含句子中的第一个单词,第二列仅包含中间单词,第三列仅包含最后一个单词。

CSV 文件示例:

my;horse;runs
your;chicken;sits
our;dog;barks

输出示例:

My chicken barks. *reload*
Your horse sits. *reload*
Our dog runs.

到目前为止我的努力:

<?php
$file = fopen('input.csv', 'r');
while (($line = fgetcsv($file, 1000, ";")) !== FALSE) {
  $x = array_rand($line);
  echo $line[$x] . "\n";
}
?>

在此先感谢并原谅这个强烈的菜鸟,请。

4

3 回答 3

5

这会根据要求给出随机句子:

<?php
$file = fopen('input.csv', 'r');
// prepare token contained
$line = array();
// read csv file line by line
while (!feof($file))
    // fill single line into token container
    $line[] = fgetcsv($file, 1000, ";");
// construct a sentence by picking random words from columns
$sentence = sprintf("%s %s %s\n",
                    $line[rand(0,sizeof($line)-1)][0],
                    $line[rand(0,sizeof($line)-1)][1],
                    $line[rand(0,sizeof($line)-1)][2] );
// output sentence
echo $sentence;
?>

但是它不是很有效,因为它首先将整个 csv 文件读入内存。所以它只适用于较小的 csv 文件(最多几百行)。对于较大的文件,您应该考虑首先选择随机行号并从文件中仅读取该行。这样做三次会给你三个单词,你可以从中构造你的句子。

于 2012-09-25T08:30:39.493 回答
3

代码

<?php

$csv = "my;horse;runs
your;chicken;sits
our;dog;barks";

$lines = explode( "\n", $csv );

foreach( $lines as $line ) {
    echo ucfirst( str_replace( ";", " ", trim( $line ) ) ) . "<br />";
}

?>

输出

My horse runs
Your chicken sits
Our dog barks
于 2012-09-25T08:26:58.550 回答
3

我会将列排序到单独的数组中,然后选择一个随机索引。

<?php
    $file = fopen('input.csv', 'r');
    while (($line = fgetcsv($file, 1000, ";")) !== FALSE) {
        $column1[] = $line[0];
        $column2[] = $line[1];
        $column3[] = $line[2];
    }

    function pickWord($wordArray){
          $x = array_rand($wordArray);
          echo $wordArray[$x] . "\n";
    }

    pickWord($column1);
    pickWord($column2);
    pickWord($column3);
 ?> 

类似的东西

于 2012-09-25T08:31:35.430 回答