【问题标题】:PHP: Echo random value from array depending on another previous value, also randomPHP:从数组中回显随机值取决于另一个先前的值,也是随机的
【发布时间】:2017-10-16 13:03:52
【问题描述】:

我需要根据 array_rand() 的先前结果回显一系列四个字符串。到目前为止,我有这个:

<?php

$titles = array('title1','title2','title3','title4');

$title1_words = array('word1','word2','word3','word4','word5','word6','word7');
$title2_words = array('word1','word2','word3','word4','word5','word6','word7');
$title3_words = array('word1','word2','word3','word4','word5','word6','word7');
$title4_words = array('word1','word2','word3','word4','word5','word6','word7');

$rand_title = array_rand($titles, 1);
echo $rand_title . "<br>";


//print 4 random words from one group
$rand_words = array_rand($title1_words, 4);
echo $title1_words[$rand_words[0]] . "<br>";
echo $title1_words[$rand_words[1]] . "<br>";
echo $title1_words[$rand_words[2]] . "<br>";
echo $title1_words[$rand_words[3]] . "<br>";

?>

我需要输出类似于:

“标题2

word2, word4, word5, word7",这些词实际上与主标题相关。

(单词因组而异。我只是使用相同的名称以便更容易理解。)

每次我刷新页面时都会回显不同的值。

// 为进一步解释编辑 //

当它刷新时,它应该回显另一个标题和与该标题相关的另一组 4 个单词。

P.S.:Srsly,为什么投反对票?至少解释一下。

【问题讨论】:

  • 以不同方式存储您的数据,问题几乎可以自行解决:$data = ['title1' =&gt; ['word1', ...], ...]
  • 如果你有“编号”的变量名,那么你通常可以使用一个像样的数组让你的生活更轻松......将你的标题词数组重建为$title_words = array( 'title1' =&gt; array('word1','word2','word3','word4','word5','word6','word7'), 'title2' =&gt; array('word1','word2','word3','word4','word5','word6','word7'), 'title3' =&gt; ('word1','word2','word3','word4','word5','word6','word7'), 'title4' =&gt; array('word1','word2','word3','word4','word5','word6','word7'), );
  • 问题是……?我只是将您的代码复制粘贴到我的 PHP 中,它可以工作。纯粹主义者会建议修改(如多维数组),但它确实会输出你想要的。
  • @Nic 建议多维数组不是“纯粹”的建议,而是如何解决问题的建议。
  • 只是指出他的代码确实有效。肯定是新手方法。

标签: php arrays random


【解决方案1】:

正如 cmets 中所解释的,处理此问题的最佳方法是将您的单词存储在二维数组中,如下所示:

$words = array(
    'title1' => array('word1','word2','word3','word4','word5','word6','word7')),
    'title2' => array('word1','word2','word3','word4','word5','word6','word7')),
    'title3' => array('word1','word2','word3','word4','word5','word6','word7')),
    'title4' => array('word1','word2','word3','word4','word5','word6','word7')),
);

然后使用$words[$titles[$rand_title]] 作为你的单词子数组。

但是,如果您不能(或绝对不想)使用二维数组,您可以始终使用 variable variables

<?php

$titles = array('title1','title2','title3','title4');

$title1_words = array('word1','word2','word3','word4','word5','word6','word7');
$title2_words = array('word1','word2','word3','word4','word5','word6','word7');
$title3_words = array('word1','word2','word3','word4','word5','word6','word7');
$title4_words = array('word1','word2','word3','word4','word5','word6','word7');

$rand_title = array_rand($titles, 1);
echo $rand_title . "<br>";

$title = $titles[$rand_title]; // should be title2, for instance
$words_array = ${$title . '_words'}; // should be $title2_words, for instance

$rand_words = array_rand($words_array, 4);
echo $words_array[$rand_words[0]] . "<br>";
echo $words_array[$rand_words[1]] . "<br>";
echo $words_array[$rand_words[2]] . "<br>";
echo $words_array[$rand_words[3]] . "<br>";

?>

【讨论】:

  • 就是这样。非常感谢@roberto06。唯一需要的改变——但那是在我身上——将 echo $rand_title 替换为 echo $titles[$rand_title]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
相关资源
最近更新 更多