为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
qq_笑_17 2022-10-28 15:24:21
我是编程新手(所以不要太苛刻),我们的导师从一开始就在推动我们使用 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);    }我究竟做错了什么?
查看完整描述

1 回答

?
弑天下

TA贡献1818条经验 获得超7个赞

“我选择了 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() 函数多少次。


查看完整回答
反对 回复 2022-10-28
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信