0

后续问题:如何从数组中随机抽取一些样本,打乱它们并放入一个新的数组中以格式化为一个列表

如何将数组的随机部分存储在数组中,然后打印为列表?

我知道我的问题的两个部分已经有了答案,但是我找到的两个答案彼此不兼容。我正在尝试使用 PHP 来做到这一点,但如果绝对必要,我愿意使用另一种代码语言。

到目前为止,我已经尝试做一个简单的版本。我想将每个数组($mars、$jupiter 和 $earth)中的一个随机问题存储为另一个数组($all),然后将此数组重新格式化为要显示为 html 的列表(使用 <ul> 和 <li> )。

出于某种原因,第一个函数需要 =>array(),但第二个不需要。

这会从数组中生成格式化的 html 样式列表(将 $all 替换为要格式化的数组)

function makeList($all) {
        //Base case: an empty array produces no list
        if (empty($all)) return '';
        //Recursive Step: make a list with child lists
        $output = '<ul>';
        foreach ($all as $key => $subArray) {
            $output .= '<li>' . $key . makeList($subArray) . '</li>';
        }
        $output .= '</ul>';
        return $output;
    }

在这里,我只是制作数组。上面的格式需要 =>array() 。我不知道为什么。

$mars = array ('How big is Mars?'=>array(), 'How many moons does Mars have?'=>array(), 'How far away is Mars?'=>array(), 'What is the highest point on Mars?'=>array());
$jupiter = array ('How big is Jupiter?'=>array(), 'How many moons does Jupiter have?'=>array(), 'How far away is Jupiter?'=>array(), 'What is the highest point on Jupiter?'=>array());
$earth = array ('How big is Earth?'=>array(), 'How many moons does Earth have?'=>array(), 'How far away is Earth?'=>array(), 'What is the highest point on Earth?'=>array());
//An array of the three arrays
$all = array ($mars, $jupiter, $earth);

这将打印 $all 的格式化版本

echo makeList ($all);

这是从数组 $marz 中随机抽取两个问题并打印它们

$marz = array ('How big is Mars?', 'How many moons does Mars have?', 'How far away is Mars?', 'What is the highest point on Mars?');
$rand_keys = array_rand($marz, 2);
echo $marz[$rand_keys[0]] . "\n";
echo $marz[$rand_keys[1]] . "\n";

在这里,我将这些结果存储在一个新数组中,并以丑陋的数组形式将其打印为证明

$new = array ($marz[$rand_keys[0]], $marz[$rand_keys[1]]);
print_r ($new);
4

1 回答 1

2

我不知道我是否得到了你需要的东西,但我发现你的代码真的很混乱,所以我根据你的描述创建了自己的函数,这里有修复的数组和所有东西

$mars = array ('How big is Mars?', 'How many moons does Mars have?', 'How far away is Mars?', 'What is the highest point on Mars?');
$jupiter = array ('How big is Jupiter?', 'How many moons does Jupiter have?', 'How far away is Jupiter?', 'What is the highest point on Jupiter?');
$earth = array ('How big is Earth?', 'How many moons does Earth have?', 'How far away is Earth?', 'What is the highest point on Earth?');

$all = array($mars, $jupiter, $earth);

function createList($a)
{
echo "<ul>";    
foreach ($a as $array) 
    {
    $questions = count($array);
    $idquestion = rand(0, $questions-1);
    echo "<li>" . $array[$idquestion]  . "</li>";
    }
echo "</ul>";
}

createList($all);
于 2013-08-14T21:07:18.877 回答