2017-02-09 4 views
-4

Lasst uns sagen, wir haben einige Array wiedoppelte Wörter aus dem Array in PHP

[ 
"red book", 
"red apple", 
"socks", 
"grey socks", 
"red sky", 
"red cross" <----- 4th "red", need to remove this element 
"green cross", 
"blue jeans" 
] 

Also muss ich löschen, jedes Array-Element, das Wort mehr als 3 mal in der gesamten Array Wiederholung enthält. Also, das Ergebnis für das obige Beispiel könnte wie folgt aussehen:

Also das Wort "rot" wiederholt mehr als 3 mal in Array. Wir müssen bis zu 3 Vorkommen jedes Wortes im Array halten und andere Elemente löschen.

Meiner Meinung nach implodieren ganze Array zuerst mit Space-Symbol, dann explodiert in einzelne Wörter. Und die Verwendung von array_count könnte zu dem Ergebnis führen. Aber ich kann diese Idee nicht so umsetzen.

Irgendwelche Vorschläge?

+0

Warum yout PHP-Code nicht hinzufügen? Was hast du versucht? – stweb

+1

Basiert die Übereinstimmung nur auf dem ersten Wort eines Eintrags? Würde zum Beispiel "einfaches Rot" als Duplikat betrachtet? – alanlittle

+0

@alanlittle alle Wörter – demonoid

Antwort

2

Sie benötigen eine Funktion wie diese schreiben:

function fix_array ($array) 
{ 
    $filtered = array(); 
    $word_counts = array(); 

    foreach ($array as $i => $value) 
    { 
     $words = explode(' ', $value); 
     $temp_word_counts = $word_counts; 

     foreach ($words as $word) { 
      if (array_key_exists($word, $temp_word_counts)){ 
       if ($temp_word_counts[$word] == 3){ 
        continue 2; 
       } 
      } 
      else{ 
       $temp_word_counts[$word] = 0; 
      } 

      $temp_word_counts[$word]++; 
     } 

     foreach ($words as $word) { 
      if (!array_key_exists($word, $word_counts)){ 
       $word_counts[$word] = 0; 
      } 
      $word_counts[$word]++; 
     } 

     $filtered[] = $value; 
    } 

    return $filtered; 
} 

$old_array = [ 
    "red book", 
    "red apple", 
    "socks", 
    "grey socks", 
    "red sky", 
    "red cross", 
    "green cross", 
    "blue jeans" 
]; 

$new_array = fix_array($old_array); 
+0

Es wäre besser für den Fragesteller, wenn Sie ein funktionierendes Skript mit Eingängen einen Aufruf an Ihre Funktion zur Verfügung gestellt, aber wie es +1 funktioniert – RiggsFolly

1

dieses Beispiel vor:

$arr = array(
     "red book", 
     "red apple", 
     "socks", 
     "grey socks", 
     "red sky", 
     "red cross", 
     "green cross", 
     "blue jeans" 
    ); 
    $used_words = array(); 
    $new_arr = array(); 

    array_walk($arr, function($val) { 
     $matches = array(); 
     preg_match_all('/\b\w+?\b/', $val, $matches); 

     foreach ($matches[0] as $value) { 
      isset($GLOBALS['used_words'][$value]) ? $GLOBALS['used_words'][$value] += 1 : $GLOBALS['used_words'][$value] = 1; 

      if ($GLOBALS['used_words'][$value] > 3) { 
       return; 
      } 
     } 

     $GLOBALS['new_arr'][] = $val; 
    }); 

    print_r($new_arr); 
Verwandte Themen