Doppelte Werte aus Array finden

kevkev

Erfahrenes Mitglied
Guten Abend,

Ich sitz derzeit vor folgendes Problem:
Ich möchte auf verschiedene Werte eines Arrays prüfen, ob diese mit vorhanden übereinstimmen.

Beispiel:
PHP:
(...)
    [./test/05 Linkin Park - High Voltage (Live).mp3] => Array
        (
            [samplerate] => 44100
            [filesize] => 5822674
            [bitrate] => 192000
            [codec] => LAME
            [playtime] => 4:03
            [title] => High Voltage (Live)
            [artist] => Linkin Park
            [album] => 
            [year] => 
            [genre] => 0
            [comment] => 
            [filemtime] => 1142179318
            [md5hash] => 0eb92ce5a91ba1b8eff8e3f102b60b74
        )
(...)

Nun möchte Ich alle anderen Einträge, die auf das Feld "title", "artist" und z.b. "samplerate" genau passen wie das obige, irgendwie anzeigen können.

So möchte Ich doppelte MP3s finden und aussortieren.

Wie mache Ich das?

danke, so spät am Abend :).

gruß Kevin
 
Zuletzt bearbeitet:
Abend,
ich hätte da noch eine Frage:
du hast einen Array dessen Elemente assoziative Arrays sind und du möchtest:
- wenn ein neues Element hinzugefügt wird, aufgrund der von dir angegebenen Merkmale überprüfen ob es schon vorhanden ist
- oder du möchtest einen bestehenden Array durchforsten und alle doppelten Vorkomnisse aussortieren?
 
Hallo Hans jörg,
danke für deine Antwort.

Das wäre egal, Ich erstelle zur Laufzeit das Array, so wäre eine Überprüfung direkt beim erstellen natürlich auch möglich.

Gruß Kevin
 
Dann is es leichter (schneller),
PHP:
$arrayList = array();

//deine schleife in der du die elmente hinzufügst

$element => Array 
        ( 
            [samplerate] => 44100 
            [filesize] => 5822674 
            [bitrate] => 192000 
            [codec] => LAME 
            [playtime] => 4:03 
            [title] => High Voltage (Live) 
            [artist] => Linkin Park 
            [album] =>  
            [year] =>  
            [genre] => 0 
            [comment] =>  
            [filemtime] => 1142179318 
            [md5hash] => 0eb92ce5a91ba1b8eff8e3f102b60b74 
        ) ;

$arrayList = push($arrayList, $element);

//Schleifenende

function push($arrayList, $element)
{
    $found = false;
    for($i = 0; $i < count($arrayList); $i ++)
    {
        if( ($arrayList[$i]['title'] == $element['title'])&&($arrayList[$i]['artist'] == $element['artist'])&& ($arrayList[$i]['semplerate'] == $element['semplerate']))
        {
                $found = true;
                break;
        }
    }
    if (!$found)
    {
        $arrayList[count($arrayList)] = $element;
    }
    return $arrayList;
}
so sollte es funktionieren.
 
Zuletzt bearbeitet:
Hey hans Jörg,

Danke für deine Lösung!
nur verstehe Ich nicht wo du $element beim Aufruf der Funktion herzauberst :).

Habe aber eine (wohl unperformante) Lösung zusammengebastelt:
PHP:
foreach($_Infos as $k => $v){
	foreach($_Infos as $k2 => $v2){
		if ($k!=$k2) {
			if (	($v2['title']==$v['title']&&$v2['artist']==$v['artist']) ||
					$v2['md5hash']==$v['md5hash']) {
				if (!in_array($k2, $_Doppelt)) {
					$_Doppelt[] = $k;
				}
			}
		}
	}
}

So erhalte Ich ein Array aller Keys die Doppelt sind :).

Gruß kevin!
 
Morgen,
ich dachte du liest ein Verzeichnis aus, oder holst die Daten aus der Datenbank - machst das in einer Schleife und dort legst du dann $element an übergibst es mit der push funktion dem array - ist es noch nicht vorhanden wird es hinzugefügt und sonst eben nicht.

Das sollte etwas performanter sein da anfangs beim Anlegen immer ein kürzeres array durchsucht wird.
 
Zurück