【问题标题】:Issue clearing out duplicate entries in php arrays清除 php 数组中的重复条目的问题
【发布时间】:2019-03-29 17:26:23
【问题描述】:

我创建了一个数据库应用程序,它可以打印表单、管理发票以及做很多有趣的事情。将其详细介绍而不会太深入...基本上我有发票。一个应用程序 ID 有许多发票。单个应用程序 ID 有多个发票的原因是每个发票代表一个“延迟天数”条目,如 NULL、30、60、90、91(表示延迟 >90 天)发票中的这种关联看起来像这个:

    Invoice ID: 17061 | App ID: 1221 | Days Late: 
    Invoice ID: 17062 | App ID: 1221 | Days Late: 30
    Invoice ID: 16217 | App ID: 1000 | Days Late:
    Invoice ID: 17063 | App ID: 1221 | Days Late: 60
    Invoice ID: 17064 | App ID: 1221 | Days Late: 90
    Invoice ID: 17065 | App ID: 1221 | Days Late: 91
    Invoice ID: 16229 | App ID: 1000 | Days Late: 30

我基本上想要输出的只是每个应用 ID 的单个发票 ID。在这个例子中。表中有 2 个应用程序 ID。 1221和1000。它应该输出的只是显示“最新”的发票。基本上,迟到的天数越高,发票越新。所以最终结果应该输出以下发票 ID。

    Invoice IDs: 17065-16229

必须有一种更简单的方法来解决这个问题,而不涉及多维数组。也许是一个 SQL 条目,或者是一个可以比较两个数组的精美 PHP 函数……我不知道。由于某种原因,我无法绕开它。

【问题讨论】:

  • There has to be an easier way to go about this without involving multidimensional arrays. Perhaps an SQL entry - 问题可能是您获取此信息的查询。如果你不想从数据库中获取特定的东西,你就不会拿出一堆东西然后对它进行分类。把你想要的拿出来。但是没有代码,没有 SQL 也没有 DB 模式,这......好吧,现在只是猜测工作。

标签: php sql multidimensional-array


【解决方案1】:

好的。我根据过去的旧请求提出了一个解决方案。我不知道为什么我似乎无法正确地将头绕在它周围,但是在坐上它之后,我想出了解决方法。所以如果看到这篇文章的人也有这个问题,他们有一个可用的解决方案。

       //start script for pairing up the invoices by their application ids
        $r=0;
        $invoicearray = array();
        $applicationidarray = array(); //two arrays to pair them up later and drop the useless ones
        while(count($ids) > $r){
            $sqlpairup = "SELECT * FROM INVOICE WHERE ID='$ids[$r]'";
            $resultpairup = $conn->query($sqlpairup);
            if ($resultpairup->num_rows > 0) {
                $rowpairup = $resultpairup->fetch_assoc();
                array_push($invoicearray, $rowpairup['ID']);
                array_push($applicationidarray, $rowpairup['APPLICATION']);
            }
            $r++;
        }

        $invoicesByAppID = [];
        $applicationidcount = count($applicationidarray);
        for($i=0; $i < $applicationidcount; $i++){
            $invoice = $invoicearray[$i];
            $application = $applicationidarray[$i];
            if(!isset($invoicesByAppID[$application])){
                $invoicesByAppID[$application] = [];
            }
            $invoicesByAppID[$application][] = $invoice;
        }
        $finalids = array();
        $groupedupinvoices = array_keys($invoicesByAppID);
        for($i=0; $i < count($groupedupinvoices); $i++){
            $invoicetoprint = max($invoicesByAppID[$groupedupinvoices[$i]]);
            array_push($finalids, $invoicetoprint);
        }
        //end script for pairing up the invoices by their applicationg ids

正在发生的是一个多维数组,它按应用程序 ID 对发票进行分组,然后通过使用 max 函数按 ID 获取最新发票来输出最终 ID。我也确信有一种更简单的方法可以做到这一点,但这是我采用的方式,并且运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2012-08-21
    相关资源
    最近更新 更多