亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 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條經驗 獲得超8個贊

“我選擇了 shift 方法(),因為它刪除了數組的第一個元素?!?/p>


...當然,但是$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 關注
  • 136 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號