我正在尝试创建一个函数,该函数将告诉我可以使用哪些免费数字,我有一个函数可以返回已在数组中获取的数字。
我希望对照空白数组检查包含现有元素的返回数组,如果数字不在数组中,则将其推入/添加到空数组中,以允许我返回可用数字/票证的数组。
我在这里尝试了一些示例,并在尝试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被取”。
在此先感谢您尝试以最佳方式解释自己的尝试。但是,如果我无法描述某些内容,请回复,以便我进一步解释。
答案 0 :(得分:2)
代替检查每个数组项目,您可以使用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);
}
}