我有以下方法:array_splice刪除多個項目
public function selectFinal(){
$db = new Database();
for($i = 0; $i < 5; $i++){
$key_id = mt_rand(0, count($this->candidates) - 1);
$itm = $this->candidates[$key_id];
$host = $itm["host"];
$item = $itm["item"];
$db->query("insert ignore into trends (trend_id, host, item) values (?, ?, ?)", array($this->nextId, $host, $item));
array_splice($this->candidates, $key_id, -1);
print_r($this->candidates);
$this->nextId++;
}
}
對於print_r()
我得到這樣的輸出:
Array
(
[0] => Array
(
[host] => www.youtube.com
[item] => IytNBm8WA1c
)
[1] => Array
(
[host] => www.youtube.com
[item] => kffacxfA7G4
)
[2] => Array
(
[host] => www.youtube.com
[item] => kXYiU_JCYtU
)
[3] => Array
(
[host] => www.youtube.com
[item] => 7AVHXe-ol-s
)
[4] => Array
(
[host] => www.youtube.com
[item] => qkM6RJf15cg
)
)
Array
(
[0] => Array
(
[host] => www.youtube.com
[item] => IytNBm8WA1c
)
[1] => Array
(
[host] => www.youtube.com
[item] => qkM6RJf15cg
)
)
Array
(
[0] => Array
(
[host] => www.youtube.com
[item] => qkM6RJf15cg
)
)
Array
(
[0] => Array
(
[host] => www.youtube.com
[item] => qkM6RJf15cg
)
)
Array
(
[0] => Array
(
[host] => www.youtube.com
[item] => qkM6RJf15cg
)
)
的陣列將與它5個或更多的項目開始。我想要做的是從數組中選擇一個隨機項並將其插入數據庫,然後將其從數組中移除。我想這樣做5次,以獲得陣列中的5個隨機項目。但由於某種原因,它選擇1然後從數組中刪除3項,我不知道爲什麼(顯示在代碼的第二部分)。
編輯:最後的工作結果
public function selectFinal(){
$db = new Database();
for($i = 0; $i < 5; $i++){
$key_id = mt_rand(0, count($this->candidates) - 1);
$itm = array_values(array_merge([$this->nextId], array_splice($this->candidates, $key_id, 1)[0]));
$db->query("insert ignore into trends (trend_id, host, item) values (?, ?, ?)", $itm);
$this->nextId++;
}
}
完美!並且使用'1'而不是'-1'也有幫助! – 2013-05-04 20:32:18
是的,這是一個小提示。我只是再次編輯,一個代碼示例留下了一些更多的提示:不要爲每個方法調用創建新的Database(),而是使用私有成員來存儲它。此外,它顯示了一個小技巧來創建可能在您的情況下工作的數組值,以使數據庫查詢更易於調用。 – hakre 2013-05-04 20:34:18
'$ values'等於'Array ( [0] => 201305042040 )'當我這樣做時。 – 2013-05-04 20:40:04