Zadejte hledaný výraz...

PHP výskyt řetězce v textu uložený do pole

RadimSt
verified
rating uzivatele
9. 1. 2021 10:46:34
Zdravím. navedete amatéra? 
Mám nejaky text ... priklad: 
$text = „lorem ipsum bla bla lba __neco laskjdflskjdf __neco lsdfkjsalfdkjlsfdkj __neco“; 
Potřeboval bych pomocí PHP v textu najít všech výskyty  řetězce __neco a uložit do pole a následně nahradit tak aby za první výskyt __neco přepsal na například „abc“ druhý výskyt __neco přepsal na „123“ atd … 
9. 1. 2021 10:46:34
https://webtrh.cz/diskuse/php-vyskyt-retezce-v-textu-ulozeny-do-pole#reply1474205
TomasX
verified
rating uzivatele
(4 hodnocení)
9. 1. 2021 11:21:34
Těch cest je více, záleží kolik takových nahrazování budeš mít.
První řešení je použití regulárního výrazu a postupné projítí všech výskytu a postupné nahrazení z pole.
$text = "lorem ipsum bla bla lba __neco laskjdflskjdf __neco lsdfkjsalfdkjlsfdkj __neco";
# co se bude hledat v textu
$search_for = "__neco";
# čím se bude výskyt hledaného slova postupně nahrazovat
$replacement=;
# interní ukazatel na aktuální pozici
$counter = -1;
# ošetření proměnné $search_for pro použití s regulárním výrazem
$escaped_search_for = preg_quote($search_for, '/');
$result = preg_replace_callback("/${escaped_search_for}/", function ($match) use (&$counter, &$replacement) {
$counter++;
# nahradí výskyt $search_for podle pořadí
# hodnotou z $replacement
if(isset($replacement)) {
return $replacement;
# pokud nenajde použitelnou náhradu v $replacement
# vrací původní obsah, tj. beze změny
} else {
return $match;
}
}, $text);
var_dump($result);
Další možnost je využití funkce substr_replace, nejprve zjistím pozici prvního výskytu
a nahrazování omezím právě pouze v téhle části textu. Provádím postupně pro každé nahrazení,
nevýhoda je, že pokud budeš nahrazovat __neco za __neco (tj. stejný obsah), bude to vracet nesmysly
$text = "lorem ipsum bla bla lba __neco laskjdflskjdf __neco lsdfkjsalfdkjlsfdkj __neco";
$search_for = "__neco";
$result = $text;
foreach( as $replacement) {
$pos = strpos($result, $search_for);
if ($pos !== false) {
$result = substr_replace($result, $replacement, $pos, strlen($search_for));
}
}
var_dump($result);
PS: omlouvám se za případné překlepy a chyby, píšu z hlavy a v php neprogramuji
9. 1. 2021 11:21:34
https://webtrh.cz/diskuse/php-vyskyt-retezce-v-textu-ulozeny-do-pole#reply1474204
RadimSt
verified
rating uzivatele
11. 1. 2021 09:19:33
Děkuji s touto pomocí jsem to dal dohromady 
11. 1. 2021 09:19:33
https://webtrh.cz/diskuse/php-vyskyt-retezce-v-textu-ulozeny-do-pole#reply1474203
Pro odpověď se přihlašte.
Přihlásit