-1
Array
    (
        [0] => Array
            (
                [source_name] => src_email_24
                [suggested_by] => Sameer
                [email_id] => sameer.m@blueoceanmi.com
                [medium_name] => Email
            )
    [1] => Array
        (
            [source_name] => src_email_24
            [suggested_by] => Sameer
            [email_id] => sameer.m@blueoceanmi.com
            [medium_name] => Display
        )
    )

And if the source_name and medium_name are same then i want the below output how can i merge the multi dimensional aaray into one array.Any help would be of great help.

 Array
        (
            [0] => Array
                (
                    [source_name] => src_email_24
                    [suggested_by] => Sameer 

                    [email_id] => sameer.m@blueoceanmi.com
                    [medium_name] => Email,Display
                )
        )

1 Answers1

1

hope source_name and email address instead source_name and medium_name; also you should have only one record for a specific email on new data set

<?php

$originalDataSet = [
    [
        'source_name'   => 'src_email_24',
        'suggested_by'  => 'Sameer',
        'email_id'      => 'sameer.m@blueoceanmi.com',
        'medium_name'   => 'Email'
    ],
    [
        'source_name'   => 'src_email_24',
        'suggested_by'  => 'Sameer',
        'email_id'      => 'sameer.m@blueoceanmi.com',
        'medium_name'   => 'Display'
    ]
];
$processedDataSet = getProcessedDataFromOriginalDataSet($originalDataSet);


function getProcessedDataFromOriginalDataSet($originalDataSet = []) {
    $processedDataSet = [];
    foreach ($originalDataSet as $data) {
        if (isset($processedDataSet[$data['email_id']])) {
            if ($processedDataSet[$data['email_id']]['source_name'] == $data['source_name'] /* && other conditions*/) {
                //change only relevant values
            }
        } else {
            $processedDataSet[$data['email_id']] = $data;
        }

    }

    return $processedDataSet;
}

Otherwise something like this

function getProcessedDataFromOriginal($originalDataSet = []) {
    $processedDataSet = [];
    foreach ($originalDataSet as $originalData) {
        $isAdded = 0;
        foreach ($processedDataSet as $processedData) {
            if ($processedData['source_name'] == $originalData['source_name'] /* && other conditions*/) {
                // make changes on processed data set
                $isAdded = 1;
                break;
            }
        }
        if  (!$isAdded) {
            $processedData[] = $originalData;
        }
    }

    return $processedDataSet;
}