php - Arrange JSON data saving duplicates into one row -


good morning guys!

i'm having hard time trying figure out how arrange following json:

{    "showelement": "1",    "degrees": [{        "name": "bachelor in psychology",        "number": "53",        "degree": "bachelor's degree"    }, {        "name": "certificate",        "number": "56",        "degree": "certificate"    }, {        "name": "high school diploma",        "number": "28",        "degree": "high school"    }, {        "name": "bachelor in sociology",        "number": "109",        "degree": "bachelor's degree"    }] } 

into this:

{    "showelement": "1",    "degrees": [{        "name": "bachelor in psychology", "bachelor in sociology",        "number": "53","109",        "degree": "bachelor's degree"    }, {        "name": "certificate",        "number": "56",        "degree": "certificate"    }, {        "name": "high school diploma",        "number": "28",        "degree": "high school"    }] } 

basically, put same degrees in 1 place , have names of said degree separated comma

i have json decoded variable:

$data = json_decode($topdegrees[1]["diplomas"],true); 

thanks in advance help!

i came this

$json = <<<json {    "showelement": "1",    "degrees": [{        "name": "bachelor in psychology",        "number": "53",        "degree": "bachelor's degree"    }, {        "name": "certificate",        "number": "56",        "degree": "certificate"    }, {        "name": "high school diploma",        "number": "28",        "degree": "high school"    }, {        "name": "bachelor in sociology",        "number": "109",        "degree": "bachelor's degree"    }] } json;  $data = json_decode( $json, true );  $degrees = $data['degrees']; $names = array_column($degrees, 'degree'); $count = array_count_values($names); $duplicates = array_filter($count, function($var) {   return $var > 1; });   foreach ( array_flip($duplicates) $degree ) {    $filter = array_filter($degrees, function($var) use ($degree) {     return ( $var['degree'] === $degree );   });    $names = [];   $numers = [];   foreach ( $filter $item ) {     $names[] = $item['name'];     $numbers[] = $item['number'];   }   $indices = array_keys($filter);   $index = array_shift($indices);   $degrees[$index]['name'] = $names; // = join(', ', $names);   $degrees[$index]['number'] = $numbers; // = join(', ', $numbers);    while ( count($indices) ) {     unset($degrees[array_shift($indices)]);   } }  $data['degrees'] = $degrees;  print_r(json_encode($data)); // {"showelement":"1","degrees":[{"name":["bachelor in psychology","bachelor in sociology"],"number":["53","109"],"degree":"bachelor's degree"},{"name":"certificate","number":"56","degree":"certificate"},{"name":"high school diploma","number":"28","degree":"high school"}]} 

your wanted json output not valid, have made array structure in place. if want comma separated text, use join statements i've commented out.


Comments