Home > front end >  PHP array duplicate add value to that index
PHP array duplicate add value to that index

Time:02-06

am just trying to fix my problem. Exactly: I have array that has been filled up by database (music playlist). That array contains duplicates what am trying to achieve is (example rows from database):

-- ID: 0 | ARTIST: SOMETHING1 | TITLE: SOMETHING1 | TIME: 04:00 | REPEAT: 1 |
-- ID: 1 | ARTIST: SOMETHING2 | TITLE: SOMETHING2 | TIME: 02:40 | REPEAT: 1 |
-- ID: 2 | ARTIST: SOMETHING3 | TITLE: SOMETHING3 | TIME: 03:20 | REPEAT: 1 |
-- ID: 3 | ARTIST: SOMETHING1 | TITLE: SOMETHING1 | TIME: 04:00 | REPEAT: 1 |
-- ID: 4 | ARTIST: SOMETHING1 | TITLE: SOMETHING1 | TIME: 04:00 | REPEAT: 1 |
-- ID: 5 | ARTIST: SOMETHING1 | TITLE: SOMETHING1 | TIME: 04:00 | REPEAT: 1 |
-- ID: 6 | ARTIST: SOMETHING1 | TITLE: SOMETHING1 | TIME: 04:00 | REPEAT: 1 |

So those values would be in array now how would I check for those duplicates in that array. If there would be duplicate I'd want to remove that duplicate but leave only one and add 1 to repeat for each duplicate. Example from above rows:

-- ID: 0 | ARTIST: SOMETHING1 | TITLE: SOMETHING1 | TIME: 04:00 | REPEAT: 5 |
-- ID: 1 | ARTIST: SOMETHING2 | TITLE: SOMETHING2 | TIME: 02:40 | REPEAT: 1 |
-- ID: 2 | ARTIST: SOMETHING3 | TITLE: SOMETHING3 | TIME: 03:20 | REPEAT: 1 |

Am sorry if there is already post but couldn't find way to explain it better.

CodePudding user response:

You can use this function. Kindly make sure you change the ARTIST key to meet your need.

function remove_duplicates($playlist){
    $filtered = [];
    foreach($playlist as $music){
        $array_exist = array_filter($filtered, function($val) use ($music) {
            return ($val['ARTIST'] === $music['ARTIST']) && 
                   ($val['TITLE'] === $music['TITLE']);
        });

        if( empty($array_exist) ){
            $filtered[] = $music;
        }else{
            foreach($array_exist as $index => $arr){
                $filtered[$index]['REPEAT']  = 1;
            }
        }
    }
    return $filtered;
}

Example

$music_playlist = [
    ['ID' => 1, 'ARTIST' => 'SOMETHING1', 'TITLE' => 'SOMETHING1', 'TIME' => '04:00', 'REPEAT' => 1],
    ['ID' => 2, 'ARTIST' => 'SOMETHING2', 'TITLE' => 'SOMETHING2', 'TIME' => '02:40', 'REPEAT' => 1],
    ['ID' => 3, 'ARTIST' => 'SOMETHING3', 'TITLE' => 'SOMETHING3', 'TIME' => '03:20', 'REPEAT' => 1],
    ['ID' => 4, 'ARTIST' => 'SOMETHING1', 'TITLE' => 'SOMETHING1', 'TIME' => '04:00', 'REPEAT' => 1],
    ['ID' => 5, 'ARTIST' => 'SOMETHING1', 'TITLE' => 'SOMETHING1', 'TIME' => '04:00', 'REPEAT' => 1],
    ['ID' => 6, 'ARTIST' => 'SOMETHING1', 'TITLE' => 'SOMETHING1', 'TIME' => '04:00', 'REPEAT' => 1],
    ['ID' => 7, 'ARTIST' => 'SOMETHING1', 'TITLE' => 'SOMETHING1', 'TIME' => '04:00', 'REPEAT' => 1]
];

print_r(remove_duplicates($music_playlist));

CodePudding user response:

You can use a for/foreach loop with every data you have. Then add the new data when something is not there. And put an auto increment on the ID with primary key.

CodePudding user response:

If it has to be in PHP and not SQL, then how about:

$keys=[];
foreach($rows as $row) {
   $id=$row['ARTIST'].$row['TITLE'];
   if ( !isset($keys[$id]) ) $keys[$id]=$row;
   else {
       $rowX=$keys[$id];
       $rowX['REPEAT']  ;
       $keys[$id]=$rowX;
   }
}

See http://sandbox.onlinephpfunctions.com/code/8558cf3ae956ac358962bf3c83ecabc299a38af3 for a working example

  •  Tags:  
  • Related