如何使用explode函数来分隔和显示不同的值

时间:2015-01-25 15:40:06

标签: javascript php arrays explode

我正在为我的英语课做一个随机句子生成器。我很接近,但由于我有限的PHP和JavaScript知识,我需要寻求帮助。我在阅读代码时并不擅长,我只是写不出来。

我想使用explode来分解一串逗号分隔值。该字符串是英语和西班牙语的混合,在.txt文件中,它们将分离如下:

The book, El libro
The man, El hombre
The woman, La mujer

我想将这两个值分解为一个数组,并将它们显示在我的网页上的不同位置。 我将使用我发现的随机文本生成器脚本,它运行良好,没有任何问题。我只需要使用explode来修改它,将值分离成一个数组,并能够显示数组的单独值。

<?php

/* File, where the random text/quotes are stored one per line */
$settings['text_from_file'] = 'quotes.txt';

/*
How to display the text?
0 = raw mode: print the text as it is, when using RanTex as an include
1 = Javascript mode: when using Javascript to display the quote
*/
$settings['display_type'] = 1;

/* Allow on-the-fly settings override? 0 = NO, 1 = YES */
$settings['allow_otf'] = 1;

// Override type?
if ($settings['allow_otf'] && isset($_GET['type']))
{
$type = intval($_GET['type']);
}
else
{
$type = $settings['display_type'];
}

 // Get a list of all text options
if ($settings['text_from_file'])
{
$settings['quotes'] = file($settings['text_from_file']);
}

// If we have any text choose a random one, otherwise show 'No text to                              choose from'
if (count($settings['quotes']))
{
$txt = $settings['quotes'][array_rand($settings['quotes'])];
}
else
{
$txt = 'No text to choose from';
 }

// Output the image according to the selected type
if ($type)
{
// New lines will break Javascript, remove any and replace them with <br />
$txt = nl2br(trim($txt));
$txt = str_replace(array("\n","\r"),'',$txt);

// Set the correct MIME type
header("Content-type: text/javascript");

// Print the Javascript code
echo 'document.write(\''.addslashes($txt).'\')';
}
else
{
echo $txt;
}
?>

显示结果的脚本:

 <script type="text/javascript" src="rantex.php?type=1"></script>

有人可以帮我修改rantex.php文件,以便我可以使用explode来分隔不同的逗号分隔值,并使用不同的脚本在我的网页上的不同位置调用它们吗?

谢谢,请原谅我的noobness。

3 个答案:

答案 0 :(得分:0)

以下似乎没必要,因为file()已经删除了换行符:

// New lines will break Javascript, remove any and replace them with <br />
$txt = nl2br(trim($txt));
$txt = str_replace(array("\n","\r"),'',$txt);

要破坏你的界限,你可以使用:

list($english, $spanish) = explode(', ', trim($txt));

答案 1 :(得分:0)

您似乎正在尝试使用PHP来提供带有一些随机句子的静态页面,对吧?那么为什么不使用PHP来提供有效的JSON,并处理在客户端上显示逻辑呢?

快速实施。

// Get the data from the text file
$source = file_get_contents('./quotes.txt', true);

// Build an array (break on every line break)                           
$sentences = explode("\n", $source);

// Filter out empty values (if there is any)
$filtered = array_filter($sentences, function($item) { 
  return $item !== "";
});

// Build a hashmap of the array
$pairs = array_map(function($item) { 
  return ['sentence' => $item];
}, $filtered);

// Encode the hashmap to JSON, and return this to the client.
$json = json_encode($pairs);

现在,您可以让客户端使用一些基本的JavaScript处理剩下的工作。

// Return a random sentence from your list.
var random = sentences[Math.floor(Math.random() * sentences.length)];

// Finally display it
random.sentence

[编辑]

您可以通过多种方式将JSON数据提供给客户端,但如果您不想使用Ajax之类的东西,您只需将内容转储到您的网页上,然后使用JavaScript更新随机句子,全局窗口对象。

// Inside your php page

<p>English: <span id="english"></span></p>
<p>Spanish: <span id="spanish"></span></p>

<script>

  var sentences = <?= json_encode($pairs); ?>;
  var random = sentences[Math.floor(Math.random() * sentences.length)];

  var elspa = document.getElementById('spanish');
  var eleng = document.getElementById('english');

  elspa.innerText = random.sentence.split(',')[1];
  eleng.innerText = random.sentence.split(',')[0];

</script>

答案 2 :(得分:0)

好的,所以我想出了这个问题,因为我付钱给别人这样做,所以我获得了0分。特别感谢@stormpat向我发送了正确的方向,如果不是他,我不会从JSON的角度来看这个。

.PHP文件是这样的:

<?php
$f_contents = file('quotes.txt'); 
$line = trim($f_contents[rand(0, count($f_contents) - 1)]);
$data = explode(',', $line);
$data['eng'] = $data[0];
$data['esp'] = $data[1];

echo json_encode($data);
?>

在标题中的.HTML页面上:

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <script>
    (function ($) {
        $(function()
        {
            function load_random_data() {
                $.get('random_line.php', function(data) {
                    var data = $.parseJSON(data);
                    $('#random_english').text(data.eng);
                    $('#random_spanish').text(data.esp);
                });
            }
            load_random_data();
            $('#get_random').click(function(e){
                e.preventDefault();
                load_random_data();
            });


        });
    })(jQuery);
    </script>

这会将不同的变量拆分成类,所以要将它们调用到我的html页面中,我将它们调用到类中,例如我想将变量放入表格单元格中,因此我给了单个td单元格一个类:

                <td id="random_spanish"></td>
                <td id="random_english"></td>

另外作为奖励,编码员投入了一个漂亮的按钮来刷新json类:

<input type="button" value="Get random" id="get_random" />

所以现在我不必让我的学生刷新整个网页,他们只需按下按钮并刷新随机变量。

再次感谢大家!