我有以下方法:
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++;
}
}
答案 0 :(得分:1)
在拼接元素并使用该元素时,您更加安全。如果您使用该错误,您会注意到没有正确的值来存储。这将使您更加了解潜在的问题:
$key_id = mt_rand(0, count($this->candidates) - 1);
$itm = array_splice($this->candidates, $key_id, -1);
var_dump($itm);
请参阅?然后,您可以更好地指出问题,例如-1不是1.请参阅http://php.net/array_splice
public function selectFinal() {
$db = $this->db;
for ($i = 0; $i < 5; $i++)
{
$key_id = mt_rand(0, count($this->candidates) - 1);
$values = array_merge(
[$this->nextId], array_splice($this->candidates, $key_id, 1)
###
);
print_r($this->candidates);
$db->query(
"insert ignore into trends (trend_id, host, item) values (?, ?, ?)",
array_values($values)
);
$this->nextId++;
}
}
答案 1 :(得分:0)
如果您只想删除特定键的数组项,可以使用 -
unset($this->candidates[$key_id])