在PHP中使用索引两次

在PHP中使用索引两次,php,Php,我尝试使用for循环,它在其中查看数组并尝试确保同一元素不会被使用两次。例如,如果$r或随机变量被赋予数字“3”,我的最终数组列表将找到与wordList[3]关联的值并将其添加。当循环再次运行时,我不希望$r再次使用3。示例输出:122234,在这里我想要一些与132456类似的东西。提前谢谢你的帮助 for($i = 0; $i < $numWords; $i++){ $r = rand(0, $numWords); $arrayTrack[$i] == $r; $word

我尝试使用for循环,它在其中查看数组并尝试确保同一元素不会被使用两次。例如,如果$r或随机变量被赋予数字“3”,我的最终数组列表将找到与wordList[3]关联的值并将其添加。当循环再次运行时,我不希望$r再次使用3。示例输出:122234,在这里我想要一些与132456类似的东西。提前谢谢你的帮助

for($i = 0; $i < $numWords; $i++){
  $r = rand(0, $numWords);
  $arrayTrack[$i] == $r;
  $wordList[$r] = $finalArray[$i];
    for($j = 0; $j <= $i; $j++){
      if($arrayTrack[$j] == $r){
          # Not sure what to do here.  If $r is 9 once, I do not want it to be 9 again.
          # I wrote this so that $r will never repeat itself
          break;
      }
}
($i=0;$i<$numWords;$i++)的
{
$r=兰特(0,$numWords);
$arrayTrack[$i]==$r;
$wordList[$r]=$finalArray[$i];
对于($j=0;$j)
ps:如果您有
硬编码的
数组
$wordList
,并且您希望首先获取其中的
$n
元素,然后洗牌(如果这不是关联数组,并且您不关心键)


很确定你把事情复杂化了。试试这个,使用:

如果
$numWords
为9,这将从
$wordList
中为您提供9个随机、唯一的元素


您可以尝试阵列随机和取消设置

例如:

$array = array('one','two','free','four','five'); 
$count = count($array);
for($i=0;$i<$count;$i++)  
{ 
   $b = array_rand($array);
   echo $array[$b].'<br />';
   unset($array[$b]);
}
$array=array('one'、'two'、'free'、'four'、'five');
$count=计数($array);

对于($i=0;$i好的……我不知道你为什么要用这么多变量来处理这个问题。
我当然不知道你在用什么
$arrayTrack
。 不过,我很有可能误解了这一切

<?php
$numWords=10;
$wordList=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

$finalArray=array();
for ($i=0; $i<$numWords; $i++) {
    start:
    $r=rand(0,$numWords);
    $wordChoice=$wordList[$r];
    foreach ($finalArray as $word) {
        if ($word==$wordChoice) goto start;
    }
    $finalArray[]=$wordChoice;
}
echo "Result: ".implode(',',$finalArray)."\n";

旁注:
$arrayTrack[$i]==$r;
您正在比较而不是分配。请输入和输出样本。@MarkM因此,输入样本是人在9中输入的,所以numWords=9。单词列表[14]目前被硬编码为a、b、c…o。因此,当前的样本输出将是abbdecfoi。但我不希望有重复的。因此,理想情况下“abcdefghi”以某种随机顺序出现。@Fred ii-,这是故意的,因为我想在$arrayTrack[$I]时重新分配$r和$r是一样的。我想我只是对如何重新分配$r感到困惑,或者让它再次在整个for循环中循环,这样我就不会得到一个副本。但这毫无意义。
==
被用作比较。你对这个比较什么都不做。你是在进行文字比较
$arrayTrack[$I]
(不是$arrayTrack[$j]…)和
$r
,然后不关心它。它给了我一个未定义的偏移量错误。这是否意味着我把索引搞砸了?@cae1um你必须显示你的原始数据,$finalArray中有什么,以及$numWords是什么。检查我是否正确-你有
单词表[14]
,您想从中提取第一个$numWords元素并进行无序排列吗?您是对的。我有单词列表[14],然后我对每个元素进行了硬编码。目前,$numWords=$\u POST['num'](因此用户只需输入一个值)。$finalArray=array()。我正试图让$r两次不相同。我想我让这比预期的要难一点。非常感谢,也很抱歉造成混淆。第一次出现堆栈溢出。不用担心,很高兴能帮上忙:)哇。我该睡觉了。我忘记了所有关于array_rand()。+1的内容。玩得好。=)
$newArray = array_slice($wordList, 0, $n);
shuffle($newArray);
var_dump($newArray);
$final_array = array();    

$rand_keys = array_rand($wordList, $numWords);

foreach ($rand_keys as $key) {
    $final_array[] = $wordList[$key];
}
$array = array('one','two','free','four','five'); 
$count = count($array);
for($i=0;$i<$count;$i++)  
{ 
   $b = array_rand($array);
   echo $array[$b].'<br />';
   unset($array[$b]);
}
<?php
$numWords=10;
$wordList=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

$finalArray=array();
for ($i=0; $i<$numWords; $i++) {
    start:
    $r=rand(0,$numWords);
    $wordChoice=$wordList[$r];
    foreach ($finalArray as $word) {
        if ($word==$wordChoice) goto start;
    }
    $finalArray[]=$wordChoice;
}
echo "Result: ".implode(',',$finalArray)."\n";