Autor Zpráva
okurkaa
Profil
Kdyz budu na jednu stránku vkládat 4 stejné php kódy bude to v pořádku? Nebo vložit jeden a pomocí nějakého kódu doplnit na další 3 místa? Co je lepší?
Radek9
Profil
Zkus si odpovědět sám. Co kdyby bylo potřeba v kódu něco změnit? Je jednodušší to měnit na jednom místě (např. ve funkci, která se potom na různých místech pouze volá), nebo na čtyřech?
okurkaa
Profil
To je pravda. No mně jde hlavně o to aby se web rychle načítal když tam budou 4 stejné kódy. Bude to mít vliv jestli budu mít stejný kód na čtyřech místech?
Keeehi
Profil
Tak ono je taky důležité, co za kód to je. Pak se můžeme bavit, jestli to je efektivní nebo by se to dalo optimalizovat. Taky to může být nenáročné a i když je to teoreticky neefektivní, nemá smysl to optimalizovat.
okurkaa
Profil
<!-- PHP -->
function wordsCheck($words, $inputs) {
    $expression = '~(' .implode('|', array_map(function ($v) { return preg_quote($v, '~'); }, $words)). ')~iu';
    
    foreach ($inputs as $haystick) {
        if (preg_match($expression, $haystick) === 1) {
            return true;
        }
    }
    return false;
}
$words = [
    'slovo1',
    'slovo2',
];
 
$inputs = array_merge([$context['TOPIC_TITLE']], array_map(function ($v) { return $v['MESSAGE']; }, $context['postrow']));
 
if (wordsCheck($words, $inputs) === false) {
echo 'reklama1';
} else {
echo 'reklama 2';
}
<!-- ENDPHP -->
mckay
Profil
Pokud tenhle kód vložíte do stránky (jedné stránky) vícekrát, dostanete error, protože se budete pokoušet znovu deklarovat funkci, kterou jste již dříve vytvořil.

Minimálně tedy tu funkci nevkladejte vícekrát, ale pouze jednou, v začátku stránky. Opakované volání jednou zadefinovane funkce je tak nějak důvod proč se funkce vytváří.
okurkaa
Profil
A dá se to předělat když to potrebuji ve stránce čtyřikrát?
Keeehi
Profil
Tohle na začátek (resp. za část která vytváří proměnnou $context)
function wordsCheck($words, $inputs) {
    $expression = '~(' .implode('|', array_map(function ($v) { return preg_quote($v, '~'); }, $words)). ')~iu';
    
    foreach ($inputs as $haystick) {
        if (preg_match($expression, $haystick) === 1) {
            return true;
        }
    }
    return false;
}

$words = [
    'slovo1',
    'slovo2',
];
 
$inputs = array_merge([$context['TOPIC_TITLE']], array_map(function ($v) { return $v['MESSAGE']; }, $context['postrow']));

ad_type = wordsCheck($words, $inputs);

A tohle na místa kde budeš potřebovat.
if (ad_type === false) {
    echo 'reklama1';
} else {
    echo 'reklama 2';
}

Celé je to ale za předpokladu že $context se nemění. Pokud se proměnná $context v rámci jedné stránky mění a na různých místech se má kód vyhodnocovat různě, pak by to mělo vypadat takto:
Toto na začátek
function wordsCheck($words, $inputs) {
    $expression = '~(' .implode('|', array_map(function ($v) { return preg_quote($v, '~'); }, $words)). ')~iu';
    
    foreach ($inputs as $haystick) {
        if (preg_match($expression, $haystick) === 1) {
            return true;
        }
    }
    return false;
}

$words = [
    'slovo1',
    'slovo2',
];

A toto na místa kde je potřeba.
$inputs = array_merge([$context['TOPIC_TITLE']], array_map(function ($v) { return $v['MESSAGE']; }, $context['postrow']));
 
if (wordsCheck($words, $inputs) === false) {
echo 'reklama1';
} else {
echo 'reklama 2';
}

Nepředpokládám, že slovník se bude měnit. Pokud ano, stačí tu definici pole $words dát taky ke každému místu kde je potřeba a z úvodu odstranit.

Ještě jedno upozornění. To hledání nehledá celá slova ale kdekoli v textu. Pokud do toho slovníku dáš třeba Rus chytne ti to v textu i třeba na slovo Koněprusy.
okurkaa
Profil
Prozatím děkuji mnohokrát, až budu zítra u počítače tak to vyzkouším.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0