-3

I have this type array structure.

Array
(
    [0] => Array
        (
            [name] => Name
            [value] => Ram
        )

    [1] => Array
        (
            [name] => Gender
            [value] => Male
        )

    [2] => Array
        (
            [name] => Age
            [value] => 25
        )

    [3] => Array
        (
            [name] => Color
            [value] => Red
        )

    [4] => Array
        (
            [name] => Color
            [value] => Yellow
        )

    [5] => Array
        (
            [name] => Game
            [value] => Cricket
        )

    [6] => Array
        (
            [name] => Game
            [value] => Football
        )

    .
    .
    .
)

How can I find same names containing in whole array and combine their values? In above, Color and Game name is same, so I need Color and Game values in array instead. Note that there may be other names being similar not only Color and Game.

Array
(
    [0] => Array
        (
            [name] => Name
            [value] => Ram
        )

    [1] => Array
        (
            [name] => Gender
            [value] => Male
        )

    [2] => Array
        (
            [name] => Age
            [value] => 25
        )

    [3] => Array
        (
            [name] => Color
            [value] => array( 'Red', 'Yellow' )
        )

    [4] => Array
        (
            [name] => Game
            [value] => array( 'Cricket', 'Football' )
        )
    .
    .
    .
)
2

1 Answer 1

1

Try below code. And check if that helps you. Note: For future ref when you ask a question here please provide the code you did so far. In this question it seems like you didn't try to solve it.

<?php
    // example code

    $newarray = [
            [
                "name" => "Name",
                "value" => "Ram"
            ],
            [
                "name" => "Gender",
                "value" => "Male"
            ],
            [
                "name" => "Age",
                "value" => 25
            ],
            [
                "name" => "Color",
                "value" => "Red"
            ],
            [
                "name" => "Color",
                "value" => "Yellow"
            ],
        ];

//make an array of combined values using value of name as key of that array
    $keyArray = [];
    foreach($newarray as $k=>$v)
    {
        if(array_key_exists($v['name'],$keyArray))
        {
            $valueArray = [];
            if(is_array($keyArray[$v['name']]))
            {
                $valueArray = $keyArray[$v['name']];
                $valueArray[] = $v['value'];
                $keyArray[$v['name']] = $valueArray;
            }
            else
            {
                $valueArray[] = $keyArray[$v['name']];
                $valueArray[] = $v['value'];
                $keyArray[$v['name']] = $valueArray;
            }
        }
        else
        {
            $keyArray[$v['name']] = $v['value'];
        }
    }
//now loop through the key values and make key as name and value as value and push into a wrapper array
    $finalArray = [];
    foreach ($keyArray as $k=>$v)
    {
        $finalArray[] = [
                "name"=>$k,
                "value"=>$v
            ];
    }

    print_r($finalArray);

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

2 Comments

But then again,it didn't work for second same name. In above e.g. it didn't work for game. In game I got the values for color too. ` Array ( [name] => Game [value] => array( 'Red', 'Yellow', 'Cricket', 'Football' ) )`
updated the answer. we have to clear valueArray data each time it enters the block if key exist. And sorry to say you this place is not to get your codes done. you have to figure out some issues by yourself.

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.