0

I have a hard one to crack.

I have this array with emails:

Array ( 
[0] => [email protected] 
[1] => [email protected] 
[2] => [email protected] 
[3] => [email protected] 
[4] => [email protected] 
[5] => [email protected] 
[6] => [email protected] 
)

And this array with form ids:

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 
)

And with this foreach I am running through every mail in the array to create a full JSON object

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);

This creates this json that is used to call an API to return number of submissions on X forms based on a condition (sendto):

[{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["1a21f6b7-8025-4724-b983-14745823ede1"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["4c8a63c0-4650-4884-b83c-70054f538ec2"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["148c1886-6674-45f3-9665-748bb6a34f4c"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""},{FormIds:["02fc3795-9457-4b02-91da-7d4b63eac1c0"],Conditions:{sendto:"[email protected]"},From:"2016-03-23",To:"today",Days:""}]

Where FormIds is a GUID of a particular form with submission. "sendto" in conditions is the mail that I want all submissions for on the particular form.

So as an example I am trying to get all submission on all 4 forms that are send to [email protected]

The above json returns this, where the number is submissions on the condition:

{
  "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
  ]
}

So that I know that the first 4 items ( 4 form ids ) in the returned JSON is for [email protected] (1,0,0,0), the next 4 for [email protected] (0,0,0,0), e.t.c.

Now my problem is that I want to combine the mail array and the returned json into a simple json that I can output with the email address and the number of total submissions. The 4 forms with identical "sendto" should be combined, so that the condition with [email protected] that are found on 4 forms, will be combined into a single item with the total number of submissions on the 4 forms.

Something like:

{"landingPageData":[{"landingPage":{"landingPageMail":"[email protected]","landingPageLeads":"1"}},{"landingPage":{"landingPageMail":"[email protected]","landingPageLeads":0}},{"landingPage":{"landingPageMail":"[email protected]","landingPageLeads":"1"}},{"landingPage":{"landingPageMail":"[email protected]","landingPageLeads":"0"}},{"landingPage":{"landingPageMail":"[email protected]","landingPageLeads":"0"}},{"landingPage":{"landingPageMail":"[email protected]","landingPageLeads":"-"}},{"landingPage":{"landingPageMail":"[email protected]","landingPageLeads":"0"}}],"totalLeads":2})

1 Answer 1

1

You can iterate through $mails_array and sum subtotals using 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;

will print (prettified):

{
    "landingPageData": [
        {
            "landingPage": {
                "landingPageMail": "[email protected] ",
                "landingPageLeads": 1
            }
        },
        {
            "landingPage": {
                "landingPageMail": "[email protected] ",
                "landingPageLeads": 0
            }
        },
        {
            "landingPage": {
                "landingPageMail": "[email protected] ",
                "landingPageLeads": 1
            }
        },
        {
            "landingPage": {
                "landingPageMail": "[email protected] ",
                "landingPageLeads": 0
            }
        },
        {
            "landingPage": {
                "landingPageMail": "[email protected] ",
                "landingPageLeads": 0
            }
        },
        {
            "landingPage": {
                "landingPageMail": "[email protected] ",
                "landingPageLeads": 0
            }
        },
        {
            "landingPage": {
                "landingPageMail": "[email protected] ",
                "landingPageLeads": 0
            }
        }
    ],
    "totalLeads": 2
}

This is the core line:

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

Multiplying current mails_array key for $formIds we can obtain starting $data key for current element, then we can extract from $data only values related with current email and sum them using array_sum(). The sum is added to a new landingPageData child and the totalLeads value is incremented by it.


Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.