Autor | Zpráva | ||
---|---|---|---|
cony Profil * |
#1 · Zasláno: 29. 8. 2012, 12:29:21
Ahoj,
mám 10 textových polí a chtěl bych nějákým jednoduchým způsobem zjistit, zda je v každém z nich jiný obsah. Napadlo mě porovnat 1. s 2., 3., 4. az 10., pak zas 2. s 3., 4., atd, ale příjde mi to strašně složité. Existuje nějáký jednoduchý způsob jak to ověřit? Předem děkuji. |
||
pcmanik Profil |
cony:
for ($i=0; $i<10; $i++) { for($x=$i; $x<10; $x++) { if ($premenna[i] == $premenna[x]) die('Zhodne texty.'); } } Skript si už môžeš upraviť podľa svojich predstáv. Edit: Ako vidím navrhol som tu najkomplikovanejšie riešenie. |
||
Tori Profil |
cony:
Na zjištění, jestli se hodnota opakuje, se dá použít např. if (max(array_count_values($pole)) > 1) echo 'opakuje se'; anebo třeba if (count($pole) !== count(array_flip($pole))) { } . Jestli chcete jen vyhodit duplicity bez nějakých hlášek uživateli, stačí třeba $novePole = array_unique($pole); anebo pokud to jde do databáze, tak unikátní klíč na tom sloupečku v DB (ale tam se to pak porovná i se všemi dříve uloženými záznamy). Projděte si funkce pro práci s poli, třeba najdete něco lepšího/vhodnějšího.
|
||
DJ Miky Profil |
#4 · Zasláno: 29. 8. 2012, 12:44:32
Můžeš je dát do pole, použít array_unique() a pokud bude mít výsledné pole stejně prvků, pak jsou prvky unikátní. Array_unique provádí v podstatě to samé, porovná každý s každým, takže pro opravdu dlouhé texty, které se liší minimálně, to nemusí být úplně nejrychlejší.
$texty = array('text1', 'text2', '...'); if(count($texty) == count(array_unique($texty))) { // každý text je jiný } else { // některé texty jsou stejné } |
||
preca1 Profil |
Zdravim,
iteruj přes tyto pole a porovnej hodnotu pole s hodnotou následujícího pole (i + 1). Ulož si výsledek do jinýho pole a nakonec by ti měly v tomto poli zbýt samý false (že se hodnoty nerovnaj). Netuším, jestli je moje řešení efektivnější, než ostatní řešení, ale můžeš to vyzkoušet a pak to sem třeba napsat. e: Dík za upozornění, několikrát sem ten příspěvek upravoval, takže sem to poplet. Teď to neni tak dokonalý, ale na zjištění duplicit by to mělo stačit |
||
pcmanik Profil |
preca1:
Tvoje riešenie nebude fungovať, nakoľko by tým prešiel len 1 krát celé pole, ale čo ak by sa rovnala povedzme 1. hodnota s 5.? K tomuto overeniu nikdy nepríde, nakoľko len porovnávaš s nasledujúcou. A naviac má len jedno pole. |
||
Tori Profil |
Přibližné porovnání: zdroj = pole s 26 odstavci lorem ipsum, co odstavec to prvek pole, z 26 bylo 8 duplicit. 1000 iterací:
$out = array_unique($pole); // 33ms $out = array_flip(array_flip($pole)); // 63ms, klíče nejsou číslované po sobě $out = array_keys(array_count_values($pole)); // 78ms |
||
cony Profil * |
#8 · Zasláno: 29. 8. 2012, 14:33:35
Super, děkuji použití array_unique() mi připadne nejlepší.
|
||
Keeehi Profil |
$stejne = false; $pocet = count($pole); for( $i = 0; $i < $pocet - 1 ; ++$i ) { for( $j = $i+1; $j < $pocet ; ++$j ) { if ( strcmp($pole[$i], $pole[$j]) !== 0 ) { $stejne = true; break 2; } } } if( $stejne ) { // vyskytují se duplicity } else { // texty jsou unikátní } |
||
Alphard Profil |
#10 · Zasláno: 29. 8. 2012, 20:40:18
Teoreticky by pro dlouhé hodnoty mohlo být rychlejší vytvořit druhé pole, které bude ukládat pouze hashe původních hodnot a s tím pracovat.
|
||
Časová prodleva: 12 let
|
0