簡體   English   中英

在PHP數組中組合相同的值

[英]combine identical values in php arrays

我很難破解。

我有這個數組的電子郵件:

Array ( 
[0] => 9000@domain.com 
[1] => hasseris@domain.com 
[2] => storcenter@domain.com 
[3] => osteraa@domain.com 
[4] => vejgaard@domain.com 
[5] => gistrup@domain.com 
[6] => storvorde@domain.com 
)

和具有表單ID的此數組:

Array ( 
[0] => 1a21f6b7-8025-4724-b983-14745823ede1 
[1] => 4c8a63c0-4650-4884-b83c-70054f538ec2 
[2] => 148c1886-6674-45f3-9665-748bb6a34f4c 
[3] => 02fc3795-9457-4b02-91da-7d4b63eac1c0 
)

並通過此foreach,我遍歷數組中的每個郵件以創建完整的JSON對象

foreach($mails_array as $key => $value) {

    foreach($formIds as $form) {

         $branchArray = array(
                   "FormIds" => [''.$form.''],
                   "Conditions" => array("sendto" => $value),
                   "From" => $date_from,
                   "To" => $date_to,
                   "Days" => ''
               );

         array_push($array, $branchArray);
    }  
}

$json = json_encode($array);
$string = preg_replace('/"([^"]+)"\s*:\s*/', '$1:', $json);

這將創建此json,該json用於調用API以根據條件(sendto)返回X表單上的提交數量:

[{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"9000@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"9000@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"9000@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"9000@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"hasseris@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"hasseris@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"hasseris@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"hasseris@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"storcenter@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"storcenter@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"storcenter@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"storcenter@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"osteraa@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"osteraa@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"osteraa@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"osteraa@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"vejgaard@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"vejgaard@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"vejgaard@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"vejgaard@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"gistrup@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"gistrup@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"gistrup@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"gistrup@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"storvorde@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"storvorde@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"storvorde@domain.com"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"storvorde@domain.com"},From:"2016-03-23",To:"today",Days:""}]

其中,FormIds是具有提交形式的特定表單的GUID。 條件中的“發送至”是我要在特定表單上提交的所有郵件。

因此,舉例來說,我嘗試將所有提交的所有4種表單都發送到9000@domain.com

上面的json返回此值,其中數字為條件下的提交:

{
  "arr": [
    1,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    1,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0
  ]
}

因此,我知道返回的JSON中的前4個項目(4個表單id)是9000@domain.com(1,0,0,0),接下來的4個是hasseris@domain.com(0,0,0 ,0)等

現在我的問題是我想將郵件數組和返回的json組合成一個簡單的json,可以與電子郵件地址和提交總數一起輸出。 應當將具有相同“ sendto”的4個表單合並,以便將在4個表單上找到的9000@domain.com的條件合並為一個項目,並在這4個表單上提交總數。

就像是:

{"landingPageData":[{"landingPage":{"landingPageMail":"9000@domain.com","landingPageLeads":"1"}},{"landingPage":{"landingPageMail":"hasseris@domain.com","landingPageLeads":0}},{"landingPage":{"landingPageMail":"storcenter@domain.com","landingPageLeads":"1"}},{"landingPage":{"landingPageMail":"osteraa@domain.com","landingPageLeads":"0"}},{"landingPage":{"landingPageMail":"vejgaard@domain.com","landingPageLeads":"0"}},{"landingPage":{"landingPageMail":"gistrup@domain.com","landingPageLeads":"-"}},{"landingPage":{"landingPageMail":"storvorde@domain.com","landingPageLeads":"0"}}],"totalLeads":2})

您可以遍歷$mails_array並使用array_sum( array_slice() )小計求和:

$json = '{"arr":[1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}';

$data = json_decode( $json )->arr;
$result = array( 'landingPageData'=>[], 'totalLeads'=>0 );

foreach( $mails_array as $key => $email )
{
    $subTot = array_sum( array_slice( $data,$key*count( $formIds ), count( $formIds ) ) );
    $result['landingPageData'][] = array
    (
        'landingPage' => array
        (
            'landingPageMail'  => $email,
            'landingPageLeads' => $subTot
        )

    );
    $result['totalLeads'] += $subTot;
}

$result = json_encode( $result );

echo $result;

將打印(美化):

{
    "landingPageData": [
        {
            "landingPage": {
                "landingPageMail": "9000@domain.com ",
                "landingPageLeads": 1
            }
        },
        {
            "landingPage": {
                "landingPageMail": "hasseris@domain.com ",
                "landingPageLeads": 0
            }
        },
        {
            "landingPage": {
                "landingPageMail": "storcenter@domain.com ",
                "landingPageLeads": 1
            }
        },
        {
            "landingPage": {
                "landingPageMail": "osteraa@domain.com ",
                "landingPageLeads": 0
            }
        },
        {
            "landingPage": {
                "landingPageMail": "vejgaard@domain.com ",
                "landingPageLeads": 0
            }
        },
        {
            "landingPage": {
                "landingPageMail": "gistrup@domain.com ",
                "landingPageLeads": 0
            }
        },
        {
            "landingPage": {
                "landingPageMail": "storvorde@domain.com ",
                "landingPageLeads": 0
            }
        }
    ],
    "totalLeads": 2
}

這是核心線:

$subTot = array_sum( array_slice( $data, $key*count( $formIds ), count( $formIds ) ) );

將當前的mails_array密鑰乘以$formIds我們可以獲得當前元素的起始$data密鑰,然后我們可以從$data僅提取與當前電子郵件相關的值,並使用array_sum()對其求和。 總和被添加到一個新的landingPageData孩子和totalLeads值由它遞增。


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM