PHP Auf doppelte Werte überprüfen

djjlx

---???---
ID: 62937
L
9 Mai 2006
599
21
Hallo!

Ich hab ein kleines Problem wo ich nicht weiter komm.

Es werdenen in eine Formular mehrere Lieferscheinnummern eingegeben.
Der Einfachtshalber alle mit , getrennt.

In der Auswertung werden die einzelnen Nummern mit explode aufgesplittet und geprüft.

Nun wollte ich noch prüfen ob eine Lieferscheinnummer doppel eingegeben wurde.

Mit folgendem Code:
PHP:
  $array = array(123456,789987,123456);
print_r(array_count_values($array ));

Da kommt ne ausgabe das der array 123456,789987,123456 nur einmal vor kommt.

Mit
PHP:
$array = array($code[$i]);
print_r(array_count_values($array));

//AUSGABE: Array ( [470011] => 1 ) Array ( [100059] => 1 ) Array ( [470011] => 1 ) Array ( [47001] => 1 )

in einer Schleife Kommt die ausgabe zwar optisch richtig aber es ist ja dann jede $i ein eingenes Array!

Jemand ne Idee wie man das am beste lösen könnte?

Hier mein Code:
PHP:
$btb = $_POST["btb"];
$code = explode(",",$btb);
$bericht = $code[$i];
 
$array = array($btb);
print_r(array_count_values($array));

//AUSGABE: Array ( [470011,100059,470011,47001] => 1 )

$a = substr_count($btb, ',');
$ok = 0;
for ($i = 0; $i <= $a; $i++) {

//Auswertung
}

Gruss
djjlx
 
Mir ist irgendwie nicht ganz klar, worauf Du hinaus willst.

Willst Du einfach nur das Array ohne Dubletten?
PHP:
$array = array_unique(array_map('trim', explode(',', $string)));

Möchtest Du überprüfen, ob ein Wert doppelt vorhanden ist?
PHP:
$array = array_map('trim', explode(',', $string));
$contains_duplicates = count($array) != count(array_unique($array));

Falls Du überprüfen möchtest, welche Werte doppelt vorhanden sind, ist das ein klein bisschen aufwendiger, deshalb warte ich erstmal ab. ;)
 
Hallo!

Danke für die Rasche hilfe!

Das rausnehmen mit array_unique hatte ich auch gerade gefunden.

Ich denke es wäre aber vorteilhaft dem Benutzer mitzuteillen welche Einträge doppelt waren und das diese entfernt wurden.

Grundsätzlich gehts darum das in ein DB die ganzen Lieferschein Nummern gespeichert sind und weiter Infos.

Kommt nun die Rechnung zb. mit 30 Lieferscheinen dran, wird überprüft ob der Gegenschein bereits in der DB vorhanden ist. Wenn nicht ist dieser noch auf der Baustelle und damit darf die Rechnung nicht freigegeben werden. So als kurze Backgroundinfo.

Ich hab nur derzeit keinen Plan wie ich das Array bzw den String "anfassen" muss damit ich eine Überprüfung machen kann.:ugly: (Zu Nahe am Projekt :mrgreen:)

Gruss
djjlx
 
Könnte man z.B. so machen:

PHP:
$nummern = "1,2,3,4,5,6,7,8,9,10";
$nummercheck = Array();
$nummernsplitten = explode(",",$nummern);
for($i = 0;$nummernsplitten[$i];$i++;) {
	if(!$nummercheck[$nummernsplitten[$i]]) {
		// Schein in Array schreiben
		$nummercheck[$nummernsplitten[$i]] = 1; // die 1 ist ein beliebiger Wert ;)
	}else{
		// Schein wurde vorher bereits ins Array geschrieben
		echo 'SCHEIN DOPPELT!';
	}
}
Es wird dann praktisch die Scheinnummern in Array $nummercheck geschrieben. Dann wird überprüft, ob da der Eintrag bereits angelegt wurde.
z.B.
Zahlen: 12,21,12
$nummercheck[12] gesucht, nicht gefunden: $nummercheck[12] = 1 wird angelegt
$nummercheck[21] gesucht, nicht gefunden: $nummercheck[21] = 1 wird angelegt
$nummercheck[12] gesucht, wird nun gefunden (da es ja vorher bereits angelegt wurde): $nummercheck[12] existiert bereits, somit erfolgt die else-Abfrage :D

Hoffe es ist einigermaßen gut erklärt, ansonsten frag nach *g*
 
man könnte doch noch ein hilfsarray anlegen, bei dem die Schlüssel diese Nummern sind und die Werte die Anzahl des vorkommens ...

PHP:
$array = array(123456,789987,123456);
foreach($array as $k=>$v)
{
$temp[$v]++;
}

Weiss jetzt nicht ob das so funktioniert... ob man evtl. nicht erst das $temp[$v] mit 1 initialisiern sollte, oder nicht.
Wenn ja, einfach ein

PHP:
if(!isset($temp[$v])) $temp[$v]=1;
else $temp[$v]++;

draus machen...

Danach kann man das Hilfsarray durchgehen und schauen welche Nummern ein Wert >1 haben.

Oder... bin ich grad total falsch und ich bekomm gleich paar Steine an Kopf geworfen ^^
 
@SerkanB: Damit baust Du ja im Endeffekt array_count_values() nach. ;)

Ich hätte da aber noch 'nen irgendwo fiesen Einzeiler im Angebot:
PHP:
<?php
	$a0 = array(1, 2, 3, 4, 2);
	var_dump(array_diff(array_unique($a0), array_keys(array_count_values($a0), 1)));
Funktioniert tadellos, ist aber etwas undurchsichtig. Im Endeffekt wird die Differenz des Ausgangsarrays und aller Einträge daraus, die nicht doppelt vorhanden sind, gebildet.
 
@tleilax: aso ... na dann, nichts für ungut ^^
Wenn ich all diese funktionen kennen würde, könnte ich mir wohl ne menge Code ersparn.
 
Morgen!

Neuer Tag neues Glück :ugly:

Danke, Danke, Danke für die ganzen Hilfestellungen.
Find super das ihr auch einen Code gepostet habt.
Ist ja wie Plug 'n Play :biggrin:

Werd gleich alle durchspielen und mir den fießen Einzeiler mit php.net zu Gemüte führen damit ich auch weiß was der anrichtet :mrgreen:

Werd natürlich dann das Ergebniss posten

Schönen Tag
Gruss
djjlx