Selecteer woorden achter @ dus '@test en hier @test2' select: @test,@test2 (twitter)

Status
Niet open voor verdere reacties.

gebruiker78

Gebruiker
Lid geworden
29 jun 2010
Berichten
428
Hallo,
ik probeer iets te maken dat woorden achter @ selecteerd.
je kunt het zien als twitter die met @ werkt.
gek genoeg kon ik maar 1 ding vinden over woorden selecteren achter een bepaalde karakter.
het probleem bij die manier was 'hier is een test @david ahha'
dat hij dan selecteerde:
david ahha
i.p.v wat ik wil:
david

dus hoe selecteer ik 1 woord achter @ en als er meerdere zijn.
'dit is een test naar @helpmij ik wil kijken of @iemand me hier kan @helpen'
dat hij dan helpmij,iemand,helpen selecteerd en zodat ik die dan in een database kan zetten.
ik denk dan dat dat met een for each(result) moet?
 
Je moet dan tekst selecteren die zit tussen @ en de eerste spatie ná @:

PHP:
$string = 'dit is een oplossing gericht @daidb52 zijn vraag.';

$at_teken = strpos( $string, '@' );

if ( $at_teken !== false ) {
  // er is een @, zoek de spatie
  $spatie_teken = strpos( $string, ' ', $at_teken );
  // selecteer nu de tekst tussen @ en spatie
  $tussenstuk = substr( $string, $at_teken + 1, $spatie - $at_teken );
}

Als er meerdere @ zijn moet je ze in een loop opvragen, door steeds te beginnen met zoeken vanaf de vorige @. Het zou kunnen dat je een teken teveel of te weinig oppakt nu, dat moet je dan even zelf herstellen :P Ik kan het niet testen.
 
Laatst bewerkt:
Bedankt voor de hulp,
maar ik kom er nog niet uit.
eigenlijk probeer ik de hele tijd dit werkend te maken maar het lukt niet:
PHP:
$matches = preg_match_all ('%@\w*%' , "hier @mijn test @doen", $found);
foreach($found as $naam){
substr($naam,1);
$query = "
INSERT INTO blog
(
id
, naam
) 
VALUES 
(
'" . mysql_real_escape_string( $id ) . "'
,'" . mysql_real_escape_string( $naam ) . "'
)"; 
$queryupload = mysql_query($query);
}

hoe maak ik dit wel werkend?
 
Krijg je een foutmelding?
Wat heb je qua debuggen al gedaan?
 
oops sorry verkeerd uitgelegd
ik bedoel dat het wel werkt maar alleen met 1 hoe maak ik het dat het met alle werkt?
PHP:
$matches = preg_match_all ('%@\w*%' , "hier @mijn test @doen", $found);
foreach($found as $naam){
$naam = substr($naam[0],1);

}
dat werkt, maar ik weet niet of er in een bericht maar 1 naam staat of 2 of 5 en nu plaats ik maar 1 naam in mijn database hoe zorg ik dat hij dat voor elke doet?
 
om de output van de regex te checken kun je

PHP:
print_r($found);

gebruiken om te kijken of die gevult wordt. Uiteraard zou ook $matches 2 moeten zijn
 
ja daar komt 0=>mijn 1=>doen uit en uit matches 2 maar als ik die gegevens heb hoe zet ik dan beide apart in mijn database?
bijv:
id naam
67 mijn
68 doen
 
in principe zou je foreach lus moeten werken met

$naam = substr($naam,1);

mogelijk even $naam expliciet als string definiëren ?
 
ja inderdaad want nu zegt hij dat substr geen array mag bevatten.
maar hoe maak ik van elke value in een array een string?

sorry maar ik ben echt een array noobie
 
PHP:
foreach( $array as $string ) {
  // code hier
}

Houd er wel rekening mee dat het een loop is en je resultaat dus waarschijnlijk ook weer in een array moet.
 
PHP:
$matches = preg_match_all ('%@\w*%' , "hier @mijn test @doen", $found);
foreach($found as $naam){
$naam = substr($naam,1);
 // code hier
}
gebruikte ik al maar dan zegt hij het is een array
PHP:
$matches = preg_match_all ('%@\w*%' , "hier @mijn test @doen", $found);
foreach($found as $naam){
$naam = substr($naam[0],1);
 // werkt wel alleen maar met 1 of als ik $naam[1] invul dan pakt hij alleen de 2de
dus 1. hij pakt maar 1 niet alle 2. ik weet zelf niet hoeveel er in kunnen zitten (1 of 3 of 5)
}
 
Dat komt waarschijnlijk omdat je $naam steeds overschrijft. ;)
Maak je binnen de foreach er $naam[] = van dan zal dat wel opgelost zijn :)
 
Dat komt waarschijnlijk omdat je $naam steeds overschrijft. ;)
Maak je binnen de foreach er $naam[] = van dan zal dat wel opgelost zijn :)
mm, helaas naam[] = substr($naam,1);
zegt hij dat $naam een string moet zijn geen array
$naam = substr($naam[],1);
helemaal een error.
$naam[] = substr($naam[],1);
weer een error

Dat weet je natuurlijk wel, want je krijgt "$aantal" terug

PHP:
foreach($found[0] as $naam)

dit werkt wel zoals je bedoeld

Ja dat werkt, raar want hoeze werkt het bij [0]?
 
Ik moest het nog even nalezen, maar je krijgt altijd een tweedimensionale array terug, zelfs als er maar 1 dimensie gevuld is.

foreach geeft je dus een subarray terug en niet een string. deze subarray bevat vervolgens exact dezelfde input als $found. Je kan dit oplossen door een tweede foreach, $naam serializen of specifiek opgeven dat je subarray "0" van $found wil hebben. Omdat je geen gebruik maakt van subblocks is voor jezelf de laatste optie het beste.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan