我试图访问嵌套数组中的4个随机条目。到目前为止,我已经提出了这个代码:
$section = array_rand($acc); // Create random array
$index = count($acc); // Array Size
echo '<div><ul>';
for ($i = 0; $i < 4; $i++) { // fetch 4 elements of array randomly
$index = rand ( 0 , $index ); // generate random index
echo '<li>';
echo '<a>'.$acc[$index]['title'].'</a>';
echo '<span>';
echo $acc[$index]['content'];
echo '</span>';
echo '</li>';
}
echo '</ul></div>';
当然,问题在于每次循环都会产生一个随机数,但不能保证它在循环的前一次迭代中不会是相同的数字。
还有其他方法可以解决这个问题吗?
目标是将4个独特的随机数组嵌套在随机选择的数组中。
答案 0 :(得分:0)
您需要一个数组或一个对象来跟踪唯一性。当数组中的数字匹配时(您之前使用过该数字),然后跳过逻辑并再次使用另一个随机数循环。
答案 1 :(得分:0)
一个基本的解决方案是保留先前生成的随机整数的列表,并在碰撞时生成新的随机整数。例如:
另一个解决方案,如果您需要整个列表,则非常有用,是制作列表的副本,然后随机选择并删除元素并将其添加到随机列表中。一遍又一遍地执行此操作,直到副本为空。这是改组的“52卡取件”方法。
我确信谷歌的一些时间会提供更正式的探索,可能会有更好的解决方案。
答案 2 :(得分:0)
也许做这样的事情:
<?php
$numIndexes = count($acc);
$usedIndexes = array();
echo '<ul>';
for ($i = 0; $i < 4; $i++) {
do{
$index = rand ( 0 , $numIndexes );
}
while(!in_array($index, $usedIndexes));
echo '<li>';
echo '<a>'.$acc[$index]['title'].'</a>';
echo '<div>';
echo $acc[$index]['content'];
echo '</div>';
echo '</li>';
$usedIndexes[] = $index;
}
echo '</ul>';
echo '</div>';
这未经过测试,但应该有效......
答案 3 :(得分:0)
这将最多选择4个随机密钥,然后使用它们。如果您的密钥少于4个,那么它将选择所有密钥。
$keys = array_rand($acc, min(4, sizeof($acc)));
echo '<div><ul>';
foreach($keys as $key) {
echo '<li>';
echo '<a>'.$acc[$key]['title'].'</a>';
echo '<span>';
echo $acc[$key]['content'];
echo '</span>';
echo '</li>';
}
echo '</ul></div>';