user3929758
user3929758

Reputation: 233

Array manipulation in php with distinct values

I am trying to merge the multiple arrays into single arrays and making the values unique.

$array = array ( 
        $array1 = array(
        "id" => 205,
        "firstName" => "NANCY GEORGE",
        "gender" => "F",
        "age" => 21,
        "alert" => "bmi"
    ),
    $array2 = array(
        "id" => 205,
        "firstName" => "NANCY GEORGE",
        "gender" => "F",
        "age" => 21,
        "alert" => "bp"
    ),
    $array3 = array(
        "id" => 206,
        "firstName" => "KUTAPPA.A.C",
        "gender" => "M",
        "age" => 31,
        "alert" => "bmi"
    )
    );  

And here is my expected output,

$array = array ( 
        '205' = array(
        "id" => 205,
        "firstName" => "NANCY GEORGE",
        "gender" => "F",
        "age" => 21,
        "alert" => "bmi,bp"
    ),
    '206' = array(
        "id" => 206,
        "firstName" => "KUTAPPA.A.C",
        "gender" => "M",
        "age" => 31,
        "alert" => "bmi"
    )
);

I am trying to merge the array in foreach, to create the new array, but its not working to get the expected result.

Upvotes: 0

Views: 72

Answers (3)

nerdlyist
nerdlyist

Reputation: 2847

This should do the trick but as one of the comments pointed out if you can fix the database to group these for you that would be ideal.

<?php
$arrays = array ( 
$array1 = array(
  "id" => 205,
    "firstName" => "NANCY GEORGE",
  "gender" => "F",
  "age" => 21,
  "alert" => "bmi"
),
$array2 = array(
  "id" => 205,
  "firstName" => "NANCY GEORGE",
  "gender" => "F",
  "age" => 21,
  "alert" => "bp"
),
$array3 = array(
  "id" => 206,
  "firstName" => "KUTAPPA.A.C",
  "gender" => "M",
  "age" => 31,
  "alert" => "bmi"
)
);

$cleanArray; //???
foreach($arrays as $array){
if(!empty($cleanArray)){
    foreach($cleanArray as $cleanKey => $clean){
        if($array['id'] == $cleanKey){
            //Just did alerts because I hope nothing else needs this...
            if(!($array['alert'] == $clean['alert'])){
                $cleanArray[$cleanKey]['alert'] .= ", " . $array['alert'];
            }
        } else {
            $id = $array['id'];
            unset($array['id']);
            $cleanArray[$id] = $array;
        }
    }
} else {
    $id = $array['id'];
    unset($array['id']);
    $cleanArray[$id] = $array;
}
}
echo"<pre>";
print_r($cleanArray);

Upvotes: 1

Rishabh Soni
Rishabh Soni

Reputation: 159

This might help you.

  $arr1 = array(
        "id" => 205,
        "firstName" => "NANCY GEORGE",
        "gender" => "F",
        "age" => 21,
        "alert" => "bmi"
    );
    $arr2 = array(
        "id" => 205,
        "firstName" => "NANCY GEORGE",
        "gender" => "F",
        "age" => 21,
        "alert" => "bp"
    );
    $arr3 = array(
        "id" => 206,
        "firstName" => "KUTAPPA.A.C",
        "gender" => "M",
        "age" => 31,
        "alert" => "bmi"
    );
    $arr4 = array($arr1, $arr2, $arr3);


    $n = count($arr4);

    for($i=0; $i<=$n; $i++){
        if($arr4[$i]['id'] == $arr4[$i+1]['id']){
            $id = $arr4[$i]['id'];
            foreach($arr4[$i] as $key=>$value){
                if($arr4[$i][$key] <> $arr4[$i+1][$key]){
                    $str = array($arr4[$i][$key], $arr4[$i+1][$key]);
                    $str = implode(',', $str);
                    $arr5[$id][$key] = $str;
                }
                else {
                    $arr5[$id][$key] = $arr4[$i][$key];
                }
            }
            $i++;
        }
        elseif($arr4[$i]['id'] <> $arr4[$i+1]['id']) {
            $id = $arr4[$i]['id'];
            $arr5[$id] = $arr4[$i];
        }

    }

    print_r($arr5);

Output-

Array
(
    [205] => Array
        (
            [id] => 205
            [firstName] => NANCY GEORGE
            [gender] => F
            [age] => 21
            [alert] => bmi,bp
        )

    [206] => Array
        (
            [id] => 206
            [firstName] => KUTAPPA.A.C
            [gender] => M
            [age] => 31
            [alert] => bmi
        )

)

Upvotes: 1

Manjeet Barnala
Manjeet Barnala

Reputation: 2995

Try will work for you...

   <?php 
   $array = array ( 
   $array1 = array(
        "id" => 205,
        "firstName" => "NANCY GEORGE",
        "gender" => "F",
        "age" => 21,
        "alert" => "bmi"
    ),
    $array2 = array(
        "id" => 205,
        "firstName" => "NANCY GEORGE",
        "gender" => "F",
        "age" => 21,
        "alert" => "bp"
    ),
    $array3 = array(
        "id" => 206,
        "firstName" => "KUTAPPA.A.C",
        "gender" => "M",
        "age" => 31,
        "alert" => "bmi"
    )
);
echo "<pre>"; print_r($array);

$newArray =array();  
foreach($array as $key => $val)
{  
    $newArray[$val['id']] = $val;
}
echo "<pre>"; print_r($newArray);

?>

Output

Array
(
    [205] => Array
        (
            [id] => 205
            [firstName] => NANCY GEORGE
            [gender] => F
            [age] => 21
            [alert] => bp
        )

    [206] => Array
        (
            [id] => 206
            [firstName] => KUTAPPA.A.C
            [gender] => M
            [age] => 31
            [alert] => bmi
        )

)

Upvotes: 0

Related Questions