[PHP] Array> Duplic. data AR1 en AR2 uit Arr 1 verwijderen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo!

Ik ben bezig met het maken van een scriptje dat een tekst kan filteren om interessante sleutelwoorden te verzamelen.
Het idee is dat er A een tekstbestand uitgelezen wordt met een aantal woorden, en B een string omgezet wordt naar een Array.

Vervolgens worden alle waarden uit Array B (de string die omgezet is naar een Array) die ook voorkomen in Array A (alle waardes uit het tekstbestand) verwijderd (dus niet vervangen met een andere waarde)

Maar om nou in een loopje alles te doorlopen is ook best intensief als je dit een enkele 100 maal achter elkaar wil uitvoeren.

Maar ik heb mijn kop gek gezocht maar ik kan dus geen functie vinden die waardes uit een array verwijderd die hij ook in een andere array vind ongeacht de plaats.

Heb wel recursive replace gevonden maar dan moet ik een te vervangen waarde opgeven. En dat is ook niet helemaal de bedoeling.

code:
1
$werkwoorden = file('werkwoorden.txt');

bijvoorbeeld:
code:
1
$werkwoorden = "werken, gezocht, geopend, verdraaid, gelopen";

(moet alleen nog even kijken hoe ik alle enters uit de array waarden kan krijgen die met file(bestand); erin gezet worden)

code:
1
2
3
4
$tekst = "Wij hebben de computer herstart nadat wij een eindje hebben gelopen";
$tekst = explode(" ", $tekst);

$nieuwewaarde = functie_weet_ik_dus_niet($tekst, $werkwoorden);


En nu is de bedoeling dat daaruit komt:

Wij hebben de computer herstart nadat wij een eindje hebben

Dus gelopen is eruit gefilterd.

Weet iemand misschien hoe ik dit zou kunnen oplossen?

  • Spiked
  • Registratie: Mei 2008
  • Laatst online: 17-09 15:30
Kijk eens naar de functie array_search.

Verwijderd

Topicstarter
Idd een stap verder.
Maar nog steeds moet ik dan een lus doorlopen om de hele array uit te pluizen.

Ik zou eigenlijk twee zinnen naast elkaar willen leggen en de duplicate gegevens totaal verwijderen. Dus als in String 1 het woord lopen zit en in String 2 ook dat lopen in het geheel uit String 2 word gehaald.

  • mjax
  • Registratie: September 2000
  • Laatst online: 20:58
Volgens mij moet je array_diff() hebben.

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 21:29

_Sunnyboy_

Mooooooooooooooooo!

Volgens mij zoek je de functie array_diff

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Ik denk dat je array_diff zoekt.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Spiked
  • Registratie: Mei 2008
  • Laatst online: 17-09 15:30
Verwijderd schreef op zaterdag 19 september 2009 @ 15:55:
(moet alleen nog even kijken hoe ik alle enters uit de array waarden kan krijgen die met file(bestand); erin gezet worden)
Oplossing:
code:
1
$arr = array_map('trim', $arr);


En betreft je probleem: array_diff icm 1 loopje zou voldoende moeten zijn.
Even uit de losse pols:
code:
1
foreach(array_diff(..) as $key) unset($arr[array_search($key)]);

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Gewoon even uit nieuwschierigheid, hoe denk je dat dit zou moeten zonder loopjes?

Ik begrijp heel af en toe niet helemaal waarom mensen denken dat functies een soort magische dingen zijn die kunnen toveren.

Zolang je gewoon twee lijstjes met woorden hebt en je wilt alle woorden die in het ene lijstje voorkomen verwijderen uit het andere lijstje met woorden dan zal dat altijd gebeuren met twee geneste lusjes.


Het kan wel sneller. Het kan zelfs wel in 1 lus, maar dan zul je wat aan je input moeten doen (en zul je ook geen problemen moeten hebben met het aanpassen van de volgorde van de elementen)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
VET!!

woorden = het berichtje in array omgezet
werkwoorden = de te filteren woorden

code:
1
2
3
    foreach(array_intersect($woorden, $werkwoorden) as $key){
        unset($woorden[array_search($key, $woorden)]);
    }


Dit is hem bijna volgens mij!!
Het was dus niet diff maar intersect!!! BEDANKT!!!! :D
Pagina: 1