如何检查现有元素的数组以分配工单号?

时间:2019-06-28 10:04:44

标签: php

我正在尝试创建一个函数,该函数将告诉我可以使用哪些免费数字,我有一个函数可以返回已在数组中获取的数字。

我希望对照空白数组检查包含现有元素的返回数组,如果数字不在数组中,则将其推入/添加到空数组中,以允许我返回可用数字/票证的数组。

我在这里尝试了一些示例,并在尝试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 个答案:

答案 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);
    }
}