Komplette Zeile aus Array entfernen, wenn Wert in einer Spalte öfter als 1x vorkommt

querytail

Erfahrenes Mitglied
Hallo,

ich lese einen Text wie folgt ein.

Code:
$text = file($textfile);
	
	foreach($text as $zeile) 
	{ 
		$fields=explode("\t",$zeile);
		$myfield[] = rtrim($fields[1]);
$myfield2[] = rtrim($fields[2]);
	}

Wie kann ich komplette Zeilen entfernen, wenn der Werte im Feld "$fields[1]" mehr als einmal vorkommt?

Danke & schönen Sonntag

querytail
 
Du schreibst erstmal alle Werte einzeln in ein Array und wendest dann die Funkiton darauf an.
 
Das hatte ich auch schon gemacht (wenn das so richtig ist?)

PHP:
$myfields[] = rtrim($fields[0]) . ', ' . rtrim($fields[1]) . ', ' . rtrim($fields[2]);

PHP:
$result = array_unique($myfields);

Und wie sage ich der Funktion, dass sie nach Feld 1 filtern muss?
 
Ich hab' es nicht ausprobiert, aber es dürfte so gehen:
PHP:
$unique_values = array();

$result = array_filter($myfields, function (&$item) use (&$unique_values) {
  if (in_array($item[1], $unique_values))
  {
    return false;
  }
  else
  {
    array_push($unique_values, $item[1]);
    return true;
  }
});
 
Jedes feld ein einzelner value in dem array. also nicht mit komma trennen, sondern 3 einzelne felder im array!
 
@einfach nur crack: Danke, aber das ergibt bei mir eine Fehlermeldung in der ersten Zeile:

PHP:
Parse error: syntax error, unexpected T_FUNCTION


@alxy:

Also so?

PHP:
$myfields[] = rtrim($fields[0]);
		$myfields[] = rtrim($fields[1]); 
		$myfields[] = rtrim($fields[2]);
 
Ja, am Ende werden dann alle doppelten oder x-fachen Werte daraus gelöscht. Wenn du noch ne Zurodnung brauchst, kannst du die Keys noch entsprechend verwenden.
 
PHP:
$text = file($textfile);
    
    foreach($text as $zeile) 
    { 
        $fields=explode("\t",$zeile);
        $myfields[] = rtrim($fields[0]);
        $myfields[] = rtrim($fields[1]); 
        $myfields[] = rtrim($fields[2]); 

$result = array_unique($myfields);
print_r($result);
    }

Das funktioniert tatsächlich (wobei ich nicht weiß, warum er sich jetzt nach Feld 0 richtet), aber ich komme nicht an rtrim($fields[1]); und rtrim($fields[2]);
 
Zurück