Php 不重复的随机名称

Php 不重复的随机名称,php,random,Php,Random,请告诉我,我的错误是什么: $myarrayofnames = ["Tisha","Vesta","Josphine"]; $randompick = array_rand($myarrayofnames,1); if($myarrayofnames[$randompick] === "Tisha") { $myarrayofnames = ["Vesta","Josphine"]; return $myarrayofnames[$randompick]; } elseif($myarr

请告诉我,我的错误是什么:

$myarrayofnames = ["Tisha","Vesta","Josphine"];
$randompick = array_rand($myarrayofnames,1);
if($myarrayofnames[$randompick] === "Tisha") {
  $myarrayofnames = ["Vesta","Josphine"];
  return $myarrayofnames[$randompick];
}
elseif($myarrayofnames[$randompick] === "Vesta") {
  $myarrayofnames = ["Tisha","Josphine"];
  return $mymyarrayofnames[$randompick];
}
elseif($myarrayofnames[$randompick] === "Josphine") {
  $myarrayofnames = ["Tisha","Vesta"];
  return $mymyarrayofnames[$randompick];
}

我试图做的是选择一个随机名称,并确保下一个随机名称不会与现在的名称相同。

我想,您在某个函数中有此代码。当您退出该函数并再次调用它以获得另一个名称时,您将以与以前相同的数组开始,因为您没有在任何地方“保存”修改过的数组

正如评论中所建议的,您可以使用shuffle和shift:

class gimmeName{

public $array = array('Tisha', 'Vesta', 'Josephine');

public function giveMeUniqueName(){
    shuffle($this->array);
    return array_shift($this->array);
}
}

这里的工作演示:

我想,您在一些函数中有这段代码。当您退出该函数并再次调用它以获得另一个名称时,您将以与以前相同的数组开始,因为您没有在任何地方“保存”修改过的数组

正如评论中所建议的,您可以使用shuffle和shift:

class gimmeName{

public $array = array('Tisha', 'Vesta', 'Josephine');

public function giveMeUniqueName(){
    shuffle($this->array);
    return array_shift($this->array);
}
}

这里的工作演示:

洗牌
数组,然后只需将数组中的元素逐个移出即可返回
$MyArrayOfNames[$randompick]不应该是
myarrayofnames[$randompick]?这可能是一个简单的修复方法。您的意思是返回$myarrayofnames[$randompick];对吧?对不起,这只是过去的一个错误。问题在于脚本的逻辑@iainn我知道如何洗牌,但不知道它如何为我工作。。。你能举个例子吗?你只需给出一个数组,对它进行数组rand,并在…
shuffle
数组后取消设置值,然后将
array\u从数组中逐个移出元素,然后返回
$myarrayofnames[$randompick]不应该是
myarrayofnames[$randompick]?这可能是一个简单的修复方法。您的意思是返回$myarrayofnames[$randompick];对吧?对不起,这只是过去的一个错误。问题在于脚本的逻辑@iainn我知道如何洗牌,但不知道它如何为我工作。。。你能举个例子吗?你可以给一个数组,在上面做数组rand,然后取消设置值…非常感谢!但请告诉我,如果我理解正确的话:有可能同一个名字会偶尔出现两次,对吗?因为洗牌。。。或者我没有正确地理解它。嗨,这是不可能的,因为array_shift移除数组的第一个元素并返回它。返回的元素不再出现在ArrayTank中,非常感谢!但请告诉我,如果我理解正确的话:有可能同一个名字会偶尔出现两次,对吗?因为洗牌。。。或者我没有正确地理解它。嗨,这是不可能的,因为array_shift移除数组的第一个元素并返回它。此返回元素不再存在于数组中