如何在 PHP 中随机选择和删除数组中的名称?

我是编程新手(所以不要太苛刻),我们的导师从一开始就在推动我们使用 TDD 进行开发。


我正在做一个选择随机名称的小程序。我的一项测试试图测试相同的名称不会被选中两次,但测试并不总是通过。


这是随机选择某人的功能。我选择 shift method() 是因为它删除了数组的第一个元素。


public function random($coders) {


        $coders = ['Paul', 'John', 'Brad'];


        shuffle($coders);

        $pickedCoder = array_shift($coders);


        return $pickedCoder;

    }  

这是测试:


public function testCoderNotKilledTwice()

    { 

        $coders = ['Paul', 'John', 'Brad'];


        $killer = new Killer();

        $deadCoder1 = $killer->random($coders);

        $deadCoder2 = $killer->random($coders);


        $this->assertNotEquals($deadCoder1, $deadCoder2);

    }

我究竟做错了什么?


qq_笑_17
浏览 90回答 1
1回答

弑天下

“我选择了 shift 方法(),因为它删除了数组的第一个元素。”...当然,但是$coders = ['Paul', 'John', 'Brad'];在您的“random()”函数中,每次都使用原始值重新创建数组。您使用 shift() 所做的更改不会在对“random()”的调用之间保留。即使您删除了它,每次调用$killer->random($coders);它时也会传入原始数组。您需要$coders在类级别定义为(私有)属性,因此它的值在调用 random() 函数之间保持不变。无需在 random() 函数中声明 $coders,也无需将副本作为参数传递给函数。像这样的东西:class Killer {  private $coders = ['Paul', 'John', 'Brad'];  public function random() {    shuffle($this->coders);    $pickedCoder = array_shift($this->coders);    return $pickedCoder;  }  }接着:public function testCoderNotKilledTwice(){   $killer = new Killer();  $deadCoder1 = $killer->random();  $deadCoder2 = $killer->random();  $this->assertNotEquals($deadCoder1, $deadCoder2);}当然请记住,您可能还需要考虑数组中不再有足够的项目来返回值的情况。我不知道您希望能够成功运行 random() 函数多少次。
打开App,查看更多内容
随时随地看视频慕课网APP