我的目标是创建一个由三个随机单词组成的句子,这些单词将从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";
}
?>
请提前致谢,并请原谅这个强烈的noobness。
答案 0 :(得分: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文件上执行(比如最多几百行)。对于较大的文件,您应该考虑首先选择随机行号并从文件中仅读取该行。这样做三次就会给你三个单词,你可以将你的句子整理出来。
答案 1 :(得分: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
答案 2 :(得分: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);
?>
像这样的东西