рд╣реИрд╢ рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╕рд░рдгреА рдЦреЛрдЬ рдирд╣реАрдВ

рдЕрдХреНрд╕рд░ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдкрдВрдХреНрддрд┐ рд╕реЗрдЯ рд╕реЗ рдЕрдиреНрдп рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдордВрдЪ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдирд┐рд╖рд┐рджреНрдз рдХреА рд╕реВрдЪреА рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди: рдирд┐рд╖рд┐рджреНрдз рд╢рдмреНрджреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдПрдВ, рдФрд░ рдлрд┐рд░ in_array() рд▓рд┐рдП in_array() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред

рдЕрд░реНрд░реЗ рдЦреЛрдЬ


рдЖрдорддреМрд░ рдкрд░ рдЪреЗрдХ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ:

 <?php $words = get_all_words_in_text($text); $badWords = ['$$$$', '@#$%', 'crud' /** ... */ ]; foreach ($words as $word) { if (in_array(strtolower($word), $badWords)) { echo 'Found bad word: ' . $word . "\n"; } } 


рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИред рд╣рдо рд╕рдВрджреЗрд╢ рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреА рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╖рд┐рджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ in_array() ред PHP рдореЗрдВ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ in_array() рдлрд╝рдВрдХреНрд╢рди рдХреЛ in_array() рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ in_array() рдореЗрдВ рд░реИрдЦрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд╣реЛрддреА рд╣реИ - O (n)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдмреБрд░реЗ рд╢рдмреНрджреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдкрд░рд┐рдЪрд╛рд▓рди рд╕рдордп рдЖрдиреБрдкрд╛рддрд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдХреБрдЫ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реИрд╢ рд╕рд░реНрдЪ


рдЪреВрдВрдХрд┐ рдмреБрд░реЗ рд╢рдмреНрджреЛрдВ рдХреА рд╕реВрдЪреА рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЬрд╛рдиреА рдЬрд╛рддреА рд╣реИ, рдЖрдк рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдирд┐рд░рдВрддрд░ рдЬрдЯрд┐рд▓рддрд╛ рд╣реЛ рдЬреЛ рд╕реВрдЪреА рдореЗрдВ рдирд┐рд╖рд┐рджреНрдз рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рди рд╣реЛред рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рд╣реИрд╢ рдЯреЗрдмрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд░рдгреА рдореЗрдВ рдкреНрд░рдореБрдЦ рдЦреЛрдЬ рдЧрддрд┐ O (1) рд╣реИ, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬреЛ рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рдпрджрд┐ рд╣рдо рдмреБрд░реЗ рд╢рдмреНрджреЛрдВ рдХреА рд╕рд╛рд░рдгреА рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрд╕рдХреЗ рдорд╛рди рдХреБрдВрдЬрд┐рдпрд╛рдБ рдмрди рдЬрд╛рдПрдБ, рдФрд░ рдЗрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди рдмрд┐рд▓рдХреБрд▓ true , рддреЛ рд╣рдо isset() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЧрддрд┐ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 <?php $words = get_all_words_in_text($text); $badWords = [ '$$$$' => true, '@#$%' => true, 'crud' => true // ... ]; foreach ($words as $word) { if (isset($badWords[strtolower($word)])) { echo 'Found bad word: ' . $word . "\n"; } } 


рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг


рдЖрдЗрдП рдирдП рддрд░реАрдХреЗ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрд╛ рдЬреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╕реЗрдЯ рдкрд░ рдмрд┐рддрд╛рдП рдЧрдП рд╕рдордп рдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛: "рд╕рд░рдгреА рдЦреЛрдЬреЗрдВ" рдФрд░ "рд╣реИрд╢ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреЗрдВ"ред

 <?php $total = 10000; $paragraph = 'this is a sentence. Crud! $$$$!'; $words = explode(' ', $paragraph); $badWordList = ['$$$$', '@#$%', 'crud', 'fud', 'fudd', 'dud']; $s = microtime(true); for ($j = 0; $j < $total; $j++) { foreach ($words as $word) { in_array(strtolower($word), $badWordList); } } echo "in_array: " . (microtime(true) - $s) . "\n"; $badWordHash = [ '$$$$' => true, '@#$%' => true, 'crud' => true, 'fud' => true, 'fudd' => true, 'dud' => true ]; $s = microtime(true); for ($j = 0; $j < $total; $j++) { foreach ($words as $word) { isset($badWordHash[strtolower($word)]); } } echo "hash: " . (microtime(true) - $s) . "\n"; 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░реАрдХреНрд╖рдг 10,000 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 in_array: 0.033491134643555 hash: 0.0069370269775391 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣реИрд╢ рдЦреЛрдЬ рдиреЗ рд╕рд░рдгреА рдХреА рдЦреЛрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 480% рдХреА рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХреАред

рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рд╣реА рдирд┐рд╖рд┐рджреНрдз рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, in_array() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдордп in_array() ред рд▓реЗрдХрд┐рди isset() рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рд╕рдордп рд╕реНрдерд┐рд░ рд░рд╣реЗрдЧрд╛ред рдореИрдВ рддреБрдореНрд╣реЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдирд┐рд╖рд┐рджреНрдз рд╢рдмреНрджреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ 10,000 рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред

 <?php $total = 10000; $paragraph = 'this is a sentence. Crud! $$$$!'; $words = explode(' ', $paragraph); //     $sequence = []; for ($j = 0; $j < 10000; $j++) { $sequence[] = 'a' . $j; } $s = microtime(true); for ($j = 0; $j < $total; $j++) { foreach ($words as $word) { in_array(strtolower($word), $sequence); } } echo "in_array: " . (microtime(true) - $s) . "\n"; //     $hash = array_fill_keys($sequence, true); $s = microtime(true); for ($j = 0; $j < $total; $j++) { foreach ($words as $word) { isset($hash[strtolower($word)]); } } echo "hash: " . (microtime(true) - $s) . "\n"; 


рдЧрддрд┐ рдореЗрдВ рдЕрдВрддрд░ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред рд╣реИрд╢ рдЦреЛрдЬ рдПрдХ рд╕рд░рдгреА рдЦреЛрдЬ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 3 162 рдкреНрд░рддрд┐рд╢рдд рддреЗрдЬ рд╣реИред

 in_array: 20.464313983917 hash: 0.0064699649810791 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЛрдИ рдирдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ


рдпрд╣ рдХреЛрдИ рдирдпрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдЪрд╛рдирдХ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВ рд▓рдЧрд╛рддрд╛рд░ " рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдСрди рд▓реБрдЖ " рдкреБрд╕реНрддрдХ рдкрдврд╝рддреЗ рд╣реБрдП рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрд╢ рдЦреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП in_array() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реЛрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рдХрд╛рдо рдХреА рдЧрддрд┐ in_array() рдпрджрд┐ рдЖрдк рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА рдХреА рдХреБрдВрдЬреА рдкрд░ isset() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In216865/


All Articles