我正在尝试创建一个函数,它会告诉我可以使用哪些免费数字,我有一个函数可以返回已经在数组中使用的数字。我希望根据空白数组检查包含现有元素的返回数组,如果该数字不在数组中,则将其推送/添加到空数组中以允许我返回可用数字/票证的数组。我在这里尝试了一些示例,并查看了有关尝试 array_intersect、in_array 等项目的 PHP 文档。我相信将空闲数字添加到空数组的最佳方法是使用 array_push,它尚未在示例代码中实现。到目前为止可用的数字功能:function freeNumbers($drawID){ $minTickets = 1; $maxTickets = totalTickets($drawID); $takenNumbers = takenNumbers($drawID); $freeNumbers = array(); for($i = 1; $i<$maxTickets; $i++){ $x = $i-1; foreach($takenNumbers as $v){ if(in_array($v, $freeNumbers)){ echo "Element is in array"; break; } else { echo $v . "is taken"; } } } //return $freeNumbers; }取数函数function takenNumbers($drawID){ $connect = new mysqli("localhost", "root", "", "dream"); $stmt = $connect->prepare("SELECT * FROM transaction WHERE DrawID = ?"); $stmt->bind_param("i", $drawID); $stmt->execute(); $result = $stmt->get_result(); if($result->num_rows == 0) exit("No rows"); $tickets = array(); while($row = $result->fetch_assoc()){ $id = $row['ID']; $tickets[] = $row['TicketNumber']; } return $tickets;}最大票数只是从数据库事务表中计算已分配的数量。在该项目的当前迭代中,我收到每个循环的以下“1 被采用”。提前致谢,我试图以最好的方式解释我正在尝试做的事情。但是,如果我无法描述某些内容,请回复,以便我可以进一步解释。
1 回答
温温酱
TA贡献1752条经验 获得超4个赞
您可以使用以下命令获取所有票号和已取票号数组之间的差值,而不是检查每个数组项array_diff():
function freeNumbers($drawID){
$minTickets = 1;
$maxTickets = totalTickets($drawID);
$takenNumbers = takenNumbers($drawID);
$freeNumbers = array();
$allTickets = range(1, $maxTickets);
$freeNumbers = array_values(array_diff($allTickets, $takenNumbers));
//return $freeNumbers;
}
编辑:添加array_values()以重置从array_diff()函数返回的数组索引。
编辑:或者如果您更喜欢使用该array_push()功能,您可以这样做:
for($i = 1; $i<$maxTickets; $i++){
if(!in_array($i, $takenNumbers)){
array_push($freeNumbers, $i);
}
}
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消