Search code examples
phparraysdata-management

PHP Data Mapping


I got some data set and it must be mapped, grouping duplicates, like this:

I have:

<?php
$var = array(
    array("Name" => "Alfred", "Number" => 1),
    array("Name" => "Alfred", "Number" => 2),
    array("Name" => "Alfred", "Number" => 3),
    array("Name" => "Aethelstan", "Number" => 4),
    array("Name" => "Aethelstan", "Number" => 5),
    array("Name" => "Aethelstan", "Number" => 6),
)
?>

I want to change it to:

<?php
$var = array(
    array("name" => "Alfred","Number" => array(1,2,3)),
    array("name" => "Aelthestan","Number" => array(4,5,6)),
)
?>

Someone has any ideas without lots of loops and one-by-one comparisons?


Solution

  • Hope this will work.

    PHP code demo

    <?php
    $var = array(
        array("Name" => "Alfred", "Number" => 1),
        array("Name" => "Alfred", "Number" => 2),
        array("Name" => "Alfred", "Number" => 3),
        array("Name" => "Aethelstan", "Number" => 4),
        array("Name" => "Aethelstan", "Number" => 5),
        array("Name" => "Aethelstan", "Number" => 6),
    );
    $result=array();
    foreach($var as $value)
    {
        if(!isset($result[$value["Name"]]))
        {
            $result[$value["Name"]]=array("Name"=>$value["Name"],"Number"=>array($value["Number"]));
        }
        else
        {
            $result[$value["Name"]]["Number"][]=$value["Number"];
        }
    
    }
    $result=array_values($result);
    print_r($result);
    

    Output:

    Array
    (
        [0] => Array
            (
                [Name] => Alfred
                [Number] => Array
                    (
                        [0] => 1
                        [1] => 2
                        [2] => 3
                    )
    
            )
    
        [1] => Array
            (
                [Name] => Aethelstan
                [Number] => Array
                    (
                        [0] => 4
                        [1] => 5
                        [2] => 6
                    )
    
            )
    
    )