ΠΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ php
PHP: ΠΠΎΠΈΡΠΊ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅
ΠΠΎΠΈΡΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ PHP ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΡΠΊΡΠΈΠΏΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π°Π΄Π°ΡΠΈ ΠΈ ΡΠΈΠΏΠ° ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΡΡΠΈΡΡΠ²Π°Ρ ΠΈΡ
ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ, ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ Π² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ. ΠΠ°Π»Π΅Π΅ ΠΌΡ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ PHP ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΡΡΠ½ΠΈΠΌ ΠΊΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΉ.
Π€ΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅:
array_search β ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. Π ΡΠ»ΡΡΠ°Π΅ ΡΠ΄Π°ΡΠΈ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ»ΡΡ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ β Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ FALSE. ΠΠΎ Π²Π΅ΡΡΠΈΠΈ PHP 4.2.0, array_search() ΠΏΡΠΈ Π½Π΅ΡΠ΄Π°ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»Π° NULL, Π° Π½Π΅ FALSE.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ mixed array_search ( mixed needle, array haystack [, bool strict] ).
ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ needle (ΡΠΎ, ΡΡΠΎ ΠΈΡΠ΅ΠΌ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅), ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ, ΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅.
ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° (ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ TRUE, ΡΠΎ ΠΏΠΎΠΈΡΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠΈΠΏΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
Π‘ΡΠΎΠΈΡ ΡΡΠΈΡΡΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΈΡΠΊΠΎΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ β ΠΏΠ΅ΡΠ²ΡΠΉ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠΉ ΠΊΠ»ΡΡ.
in_array β ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π»ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ TRUE, Π½Π΅ΡΠ΄Π°ΡΠΈ FALSE. ΠΠ°ΠΊ Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π°Π»ΠΈΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΊΠ»ΡΡ Π½Π° ΡΠ°ΠΌ ΠΆΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ.
Π€ΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°, Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠΌ:
foreach β ΠΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, PHP Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½Ρ Π΄Π²Π° Π²ΠΈΠ΄Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΡΡ):
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ foreach Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ TRUE ΠΏΡΠΈ ΡΡΠΏΠ΅Ρ Π΅
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ»ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΠΈ ΡΡΠΏΠ΅Ρ Π΅
while β ΡΠΈΠΊΠ», Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΏΠΎΠΈΡΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΡΠ°ΠΌΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΡΡΡ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ
while (expr)
statement
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ»ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΠΈ ΡΡΠΏΠ΅Ρ Π΅
ΠΠ· Π²ΡΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΎΠ΄Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ»ΡΠΆΠ°Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°Ρ , Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΈΡΠΊ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°Ρ . ΠΡΠ±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΈΠΏΠ° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ , Π±ΡΠ΄Ρ ΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ², ΠΈΠ»ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΡΠ΅ Π΄Π΅ΡΠ΅Π²ΡΡ.
ΠΠ°Π»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅ΠΌ Π·Π°ΠΌΠ΅Ρ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΠΈΡΠΊΠ°:
Π§ΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π° | array_search | Π¦ΠΈΠΊΠ» foreach | Π¦ΠΈΠΊΠ» while |
10 | 0.0000068 | 0.0000064 | 0.0000076 |
100 | 0.0000078 | 0.0000153 | 0.0000185 |
1000 | 0.0000209 | 0.0001177 | 0.0001351 |
10000 | 0.0004210 | 0.0012128 | 0.0018670 |
100000 | 0.0039679 | 0.0130989 | 0.0175215 |
ΠΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΌΠ΅ΡΠΎΠ² Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ array_search, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ Π² ΠΌΠ°Π»ΡΡ ΡΠ°ΠΊ ΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°Ρ . ΠΡΠΈ ΡΡΠΎΠΌ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠΊΠ»ΠΎΠ² Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΌΠ°ΡΡΠΈΠ², Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π½Π° ΠΏΡΡΡΠΎΡΡ Π² PHP
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°. Π ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π΅ΡΡΡ Π»ΠΈ Ρ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΡΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠ΄Π΅ΠΌ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΠΎΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΌΡ. Π ΠΏΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π° ΠΌΠ°ΡΡΠΈΠ². ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠ΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ Π² ΡΠ·ΡΠΊ PHP ΡΡΠ½ΠΊΡΠΈΡ is_array. Π Π°Π·Π±Π΅ΡΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ.
$arr = [‘id’, ‘name’, ’email’]; // ΠΠ°ΡΡΠΈΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² if(is_array($arr))< echo 'ΠΡΠΎ ΠΌΠ°ΡΡΠΈΠ²'; >else
Π€ΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½Π΅Ρ true, Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ² ΠΈ false β Π΅ΡΠ»ΠΈ Π½Π΅ ΠΌΠ°ΡΡΠΈΠ². ΠΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ. ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΡ.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π° ΠΏΡΡΡΠΎΡΡ ΠΈ ΠΏΡΡΡΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² PHP
Π€ΡΠ½ΠΊΡΠΈΡ empty ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π½Π΅Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΡΡΠΎΠΌΡ Π΅Π΅ Π»ΡΡΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ β array_diff. Π‘ Π΅Π΅ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΡ ΡΡΠ°Π²Π½ΠΈΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π²ΡΠ²Π΅Π΄Π΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΌΠ±ΡΡΠ½ΠΎ ΠΈ Π½Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
array(8) < [0]=>string(4) «name» [1]=> string(0) «» [2]=> string(3) «num» [3]=> [4]=> string(0) «» [5]=> [6]=> string(4) «Alex» [7]=> string(0) «» > array(3) < [0]=>string(4) «name» [2]=> string(3) «num» [6]=> string(4) «Alex» >
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΎΠΏΡΡΡΠΈΡ Π²ΡΠ΅ ΠΏΡΡΡΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π°, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ NULL ΠΈ false ΠΈ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΎ-ΡΠΎ Π΅ΡΡΡ. ΠΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π±ΡΠ» ΠΏΡΡΡΠΎΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠΊΠ»Π° for.
array(4) < ["age"]=>int(34) [«name»]=> string(4) «Ivan» [«city»]=> string(0) «» [«number»]=> string(0) «» > array(2) < ["age"]=>int(34) [«name»]=> string(4) «Ivan» >
ΠΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅
ΠΠ»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ in_array. ΠΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π½Π° ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΡΡΠΎ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΊΠ°ΡΡ, Π²ΡΠΎΡΡΠΌ β Π³Π΄Π΅. ΠΠ° ΡΡΠΎΠΌ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΎΠΊΠΎΠ½ΡΠ΅Π½. ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π²Π°ΠΌ Π² Π½Π΅ΠΌ Π²ΡΠ΅ Π±ΡΠ»ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΠΎ Π΅ΡΠ»ΠΈ ΠΎΡΡΠ°Π»ΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π²ΠΎΠΏΡΠΎΡΡ, Π·Π°Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΈΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ .
array_key_exists
(PHP 4 >= 4.0.7, PHP 5, PHP 7, PHP 8)
array_key_exists β ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π»ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΊΠ»ΡΡ ΠΈΠ»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
ΠΠ°ΡΡΠΈΠ² Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΡΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ false Π² ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ.
array_key_exists() ΠΈΡΠ΅Ρ ΠΊΠ»ΡΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠΈ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°Ρ Π½Π°ΠΉΠ΄Π΅Π½Ρ Π½Π΅ Π±ΡΠ΄ΡΡ.
ΠΡΠΈΠΌΠ΅ΡΡ
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ array_key_exists()
ΠΡΠΈΠΌΠ΅Ρ #2 array_key_exists() ΠΈ isset()
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ°ΠΊΠΆΠ΅
User Contributed Notes 38 notes
If you want to take the performance advantage of isset() while keeping the NULL element correctly detected, use this:
Benchmark (100000 runs):
array_key_exists() : 205 ms
is_set() : 35ms
isset() || array_key_exists() : 48ms
Note:
The code for this check is very fast, so you shouldn’t warp the code into a single function like below, because the overhead of calling a function dominates the overall performance.
function array_check(. )
<
return (isset(..) || array_key_exists(. ))
>
You’ll notice several notes on this page stating that isset() is significantly faster than array_key_exists(). This may be true except for one small hitch. isset() will return false for arrays keys that have there value set to NULL, which is therefore not entirely accurate.
= array();
$foo [ ‘bar’ ] = NULL ;
Beware that if the array passed to array_key_exists is NULL, the return value will also be NULL.
This is undocumented behaviour, moreover the documentation (and return typehint) suggest that the array_key_exists function only returns boolean value. But that’s not the case.
The way array_key_exists handles null, float, boolean, and ‘integer-representing string’ keys is inconsistent in itself and, in the case of bool and float, with the way these are converted when used as array offset.
array (
» => 1,
0 => 2,
1 => 3,
4 => 4,
’08’ => 5,
8 => 6,
)
null is a key.
false is not a key.
true is not a key.
4.6 is not a key.
«08» is a key.
«8» is a key.
Well, and you get this warning three times (on the bools and the float, but not on the null):
Warning: array_key_exists() [function.array-key-exists]: The first argument should be either a string or an integer in /var/www/php/test.php on line 6
The argument of array_key_exists() vs. isset() came up in the workplace today, so I conducted a little benchmark to see which is faster:
?>
On Windows, the output is similar to
array_key_exists(): 0.504 [82.895%] seconds
isset(): 0.104 [17.105%] seconds
On Mac or Linux, isset() is faster but only by a factor of approximately 1.5.
I’ve got a new take on the multi key function I would like to share.
Very simple case-insensitive array_key_exists:
bool (in_array(strtolower($needle), array_map(‘strtolower’, array_keys($haystack))))
array_key_exists doesn’t work with objects implementing ArrayAccess interface. It also ignores possible __get() method in such objects, despite the fact it accepts object as a second parameter. It works only with ‘real’ properties.
Here is an example with array_key_exists switching between content-types :
I took hours for me to debug, and I finally recognized that,
Or you will get no reply.
Rudi’s multidimensional array_key_exists function was not working for me, so i built one that is.
Enjoy.
Here is a little function for case sensitivity to elaborate on what was said by MarkL from ##php (Freenode) and mmanning at mdanderson dot org from this page:
Also, I’ve been running into issues with escaping for Regex, so I decided to give something like this a shot:
Regarding performance differences between isset() and array_key_exists(), the differences may be there, but the function are not always interchangable.
A little function which take an array as keys
Here’s a function to return a reference to the first array element that has a given key. The code works for multidimensional arrays:
I created this function that uses array key exist to compare a form and a table to see if something has changed.
This can be very helpfull if you need to update a table record from a form but you do not want to display all table fields.
/// it works like array_key_exists that can go deeper
$cidade = array(
‘redonda’ => array(
‘curta’ => ‘o seu filme’
),
‘quadrada’ => array(
‘longa’ => array(
‘azul’ => array(‘logo’,2,’mais’,2,’sΓ£o’,4),
‘amarela’ => array(‘entΓ£o’,3,’vezes’,2,’sΓ£o’,6),
‘verde’ => array(‘senΓ£o’,100,’dividido por’,2,’Γ©’,50)
),
‘extravagante’ => array(
‘vermelha’ => ‘chama atenΓ§Γ£o’,
‘vinho’ => ‘cor de uva’,
‘ocre’ => 1255
),
‘comprida’ => array(
‘amarela’ => ‘brasilia dos mamonas’,
‘branca’ => ‘bandeira da paz’,
‘preta e branca’ => ‘peΓ§as do xadrez’
)
),
‘oval’ => array(
‘conde’ => ‘lobo’
),
‘plana’ => array(
‘curta’ => array(
‘azul’ => array(‘e’,2,’mais’,2,’sΓ£o’,4),
‘amarela’ => array(‘sim’,3,’vezes’,2,’sΓ£o’,6),
‘verde’ => array(‘verdade’,100,’dividido por’,2,’Γ©’,50)
)
)
);
/// if the tree you search for exists, it will print out ‘true’
Further research on this has turned up that the performance problems are a known, confirmed bug in PHP 5.1.x, and have been fixed in PHP builds after September 2006. You can find the bug report here: http://bugs.php.net/bug.php?id=38812
However, just because it’s a fixed bug doesn’t really change the conclusion. If you’re writing a script and there’s any chance it could be used on a PHP 5.1.x server, you should still avoid this function and use isset() or some other kind of test if you want it to run efficiently.
I saw some examples above for array_keys_exist() or functions to see if multiple keys exist in a given array and return false if any of them don’t.
Here is a simpler way to do this:
Website-create.ru
ΠΠ°ΡΠ°ΡΡΡΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π»ΠΈ ΡΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π°Π»ΠΈΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π°Π΄Π°Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈΠ· Π½Π°ΡΠ΅ΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π½Π΅ΠΌ. ΠΡΠΊΠΎΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΈ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ-ΡΠΎ ΠΈΡΠ΅Ρ. ΠΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΡΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π±ΡΠ΄ΡΡ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ ΡΠ΅ΠΌΠΈ ΠΆΠ΅.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ ΠΈΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π°Π»ΠΈΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. Π€ΡΠ½ΠΊΡΠΈΡ in_array()
Π€ΡΠ½ΠΊΡΠΈΡ in_array() ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅.
ΠΡΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΅Π΅ ΡΠ°Π±ΠΎΡΡ ΡΠ΄Π°ΡΠ½ΡΠΉ ΠΈ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½Π΅Ρ true, ΡΠΎ Π΅ΡΡΡ Β«ΠΏΡΠ°Π²Π΄ΡΒ».
Π’Π°ΠΊΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
ΠΠ°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΌΠ°ΡΡΠΈΠ². ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π½Π°Π»ΠΈΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈ Π²ΡΠ²Π΅Π΄Π΅ΠΌ Π½Π° ΡΠΊΡΠ°Π½ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
ΠΡΡΠ°Π±ΠΎΡΠ°Π² ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ²Π΅Π΄Π΅Ρ Π½Π° ΡΠΊΡΠ°Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Β«YesΒ», ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Β«MarinaΒ» Π² Π½Π°ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ.
ΠΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΈ ΠΡ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Β«NoΒ».
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π°Π»ΠΈΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. Π€ΡΠ½ΠΊΡΠΈΡ array_search()
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° array_search(), ΠΊΠΎΡΠΎΡΠ°Ρ Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠ»ΡΡ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΡΠΎ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ.
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ΅ ΠΆΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΡΠΎ ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ°Ρ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΠ°Π±ΠΎΡΠ°Ρ Ρ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π½Π° ΡΠΊΡΠ°Π½Π΅ Β«nameΒ», ΡΠΎ Π΅ΡΡΡ ΠΊΠ»ΡΡ ΠΎΡ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Β«MilaΒ».
ΠΡΠΈ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠΈ ΠΈ ΠΏΠΎ ΡΡΡΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠΎΠΈΡΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅
Π ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΡΠΌ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ? ΠΠ΅Π΄Ρ Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π±ΡΠ΄ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ.
ΠΠ΄Π΅ΡΡ ΡΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ Π½Π°ΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°ΡΡ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΡΠ΅ Π½Π΅ ΡΠ°ΠΊ ΡΠΆ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΏΡΠΎΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΠΈΡΡ Π²Π΅ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΊΠ», Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, foreach(), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ.
ΠΠΎΠΏΡΡΡΠΈΠΌ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ². ΠΠ³ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ ΠΈΡΠΊΠΎΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
ΠΡΠ΅, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ β ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π±ΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΡΠΈΠΊΠ»Π΅ foreach(). ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°Π½ Π½Π° ΠΊΠ»ΡΡ ($key) ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ($value).
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π²Π½ΡΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠΎΡ Ρ ΡΡΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΌΡ ΠΈ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΈΡΠ° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈΡΠΊΠΎΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
ΠΡΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΌΡ Π²ΡΠ²Π΅Π΄Π΅ΠΌ Π½Π° ΡΠΊΡΠ°Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π° Π΅ΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅ΠΌ Π΄ΡΡΠ³ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π΅Ρ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π²ΡΠ΅ ΡΡΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π°:
ΠΠ°ΠΊ ΠΡ Π²ΠΈΠ΄ΠΈΡΠ΅, Π²Π½Π°ΡΠ°Π»Π΅ ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΡΠ°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ².
ΠΡΠΈ ΡΡΠΎΠΌ Π·Π΄Π΅ΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π·Π½Π°ΠΊ ΡΠ°Π²Π΅Π½ΡΡΠ²Π°, Π° Β«.=Β».
ΠΠ°ΠΊ ΠΡ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΠΈΡΠΎΠ³ΠΎΠΌ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Β«OK! Element here!Β».
ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΈ ΠΡ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Β«No have element!Β».
ΠΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΏΡΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π΅ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π° Π΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΡΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΈΡΠΊΠΎΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠ΄Π°Π²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ Ρ.Π΄.
ΠΠΎΡ ΠΈ Π²ΡΠ΅ Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½Ρ! ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎΠΊ Π±ΡΠ» ΠΏΠΎΠ½ΡΡΠ΅Π½ ΠΈ ΠΏΠΎΠ»Π΅Π·Π΅Π½! ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ°ΠΌΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ.
Π Ρ ΠΆΠ΄Ρ ΠΠ°ΡΠΈΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π².
ΠΠ΅Π»ΠΈΡΠ΅ΡΡ ΡΡΠΎΠΊΠΎΠΌ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ Π΄ΡΡΠ·ΡΡΠΌΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΡΠΎΡ. ΡΠ΅ΡΠ΅ΠΉ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅. Π ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ΡΡ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π±Π»ΠΎΠ³Π°. ΠΡ ΡΠΆΠ΅ ΡΠΎΠ±ΡΠ°Π»ΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎΠΉ Π°ΡΡ ΠΈΠ² ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ², ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠΏΠΎΠ»Π½ΡΡΡΡΡ!
in_array
(PHP 4, PHP 5, PHP 7, PHP 8)
in_array β ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π»ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
ΠΡΠΈΠΌΠ΅ΡΡ
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ in_array()
ΠΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ in_array() ΡΠ΅Π³ΠΈΡΡΡΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠ°, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ²Π΅Π΄Π΅Ρ:
ΠΡΠΈΠΌΠ΅Ρ #2 ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ in_array() Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ strict
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
ΠΡΠΈΠΌΠ΅Ρ #3 ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ in_array() Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° needle
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ°ΠΊΠΆΠ΅
User Contributed Notes 38 notes
Loose checking returns some crazy, counter-intuitive results when used with certain arrays. It is completely correct behaviour, due to PHP’s leniency on variable types, but in «real-life» is almost useless.
The solution is to use the strict checking option.
// First three make sense, last four do not
If you’re working with very large 2 dimensional arrays (eg 20,000+ elements) it’s much faster to do this.
Remember to only flip it once at the beginning of your code though!
# foo it is found in the array or one of its sub array.
For a case-insensitive in_array(), you can use array_map() to avoid a foreach statement, e.g.:
Determine whether an object field matches needle.
= array( new stdClass (), new stdClass () );
$arr [ 0 ]-> colour = ‘red’ ;
$arr [ 1 ]-> colour = ‘green’ ;
$arr [ 1 ]-> state = ‘enabled’ ;
in_array() may also return NULL if the second argument is NULL and strict types are off.
If the strict mode is on, then this code would end up with the TypeError
In a high-voted example, an array is given that contains, amongst other things, true, false and null, against which various variables are tested using in_array and loose checking.
If you have an array like:
$arr = array(0,1,2,3,4,5);
Add an extra if() to adrian foeder’s comment to make it work properly:
If you found yourself in need of a multidimensional array in_array like function you can use the one below. Works in a fair amount of time
This code will search for a value in a multidimensional array with strings or numbers on keys.
I just struggled for a while with this, although it may be obvious to others.
If you have an array with mixed type content such as:
?>
be sure to use the strict checking when searching for a string in the array, or it will match on the 0 int in that array and give a true for all values of needle that are strings strings.
I found out that in_array will *not* find an associative array within a haystack of associative arrays in strict mode if the keys were not generated in the *same order*:
?>
I had wrongly assumed the order of the items in an associative array were irrelevant, regardless of whether ‘strict’ is TRUE or FALSE: The order is irrelevant *only* if not in strict mode.
I would like to add something to beingmrkenny at gmail dot com comparison post. After debugging a system, i discovered a security issue in our system and his post helped me find the problem.
In my additional testing i found out that not matter what you search for in an array, except for 0 and null, you get true as the result if the array contains true as the value.
Examples as php code :
Such the best practice in our case is to use strict mode. Which was not so obvious.
Kelvin’s case-insensitive in_arrayi is fine if you desire loose typing, but mapping strtolower onto the array will (attempt to) cast all array members to string. If you have an array of mixed types, and you wish to preserve the typing, the following will work:
// Note
// You can’t use wildcards and it does not check variable type
?>
A first idea for a function that checks if a text is in a specific column of an array.
It does not use in_array function because it doesn’t check via columns.
Its a test, could be much better. Do not use it without test.
Beware when using this function to validate user input:
$a = array(‘0’ => ‘Opt 1’, ‘1’ => ‘Opt 2’, ‘2’ => ‘Opt 3’);
$v = ‘sql injection’;
var_dump(in_array($v, array_keys($a)));
This will result : true;
If you need to find if a value in an array is in another array you can use the function:
The top voted notes talked about creating strict comparison function, because in_array is insufficient, because it has very lenient type checking (which is PHP default behaviour).
The thing is, in_array is already sufficient. Because as a good programmer, you should never have an array which contains
It’s better to fix how you store data and retrieve data from user, rather than fixing in_array() which is not broken.
If you’re creating an array yourself and then using in_array to search it, consider setting the keys of the array and using isset instead since it’s much faster.
Recursive in array using SPL
If array contain at least one true value, in_array() will return true every times if it is not false or null
Be careful to use the strict parameter with truth comparisons of specific strings like «false»:
?>
The above example prints:
False is truthy.
False is not truthy.
This function is for search a needle in a multidimensional haystack:
When using numbers as needle, it gets tricky:
Note this behaviour (3rd statement):
in_array(0, array(42)) = FALSE
in_array(0, array(’42’)) = FALSE
in_array(0, array(‘Foo’)) = TRUE
in_array(‘0’, array(‘Foo’)) = FALSE
Watch out for this:
Yes, it seems that is_array thinks that a random string and 0 are the same thing.
Excuse me, that’s not loose checking, that’s drunken logic.
Or maybe I found a bug?
hope this function may be useful to you, it checks an array recursively (if an array has sub-array-levels) and also the keys, if wanted:
If you have a multidimensional array filled only with Boolean values like me, you need to use ‘strict’, otherwise in_array() will return an unexpected result.
Hope this helps somebody, cause it took me some time to figure this out.
If you search for numbers, in_array will convert any strings in your array to numbers, dropping any letters/characters, forcing a numbers-to-numbers comparison. So if you search for 1234, it will say that ‘1234abcd’ is a match. Example:
Esta funciΓ³n falla con las letras acentuadas y con las eΓ±es. Por tanto, no sirve para los caracteres UTF-8.
El siguiente cΓ³digo falla para na cadena = «MarΓa MaΓ±as», no reconoce ni la «Γ» ni la «Γ±»:
// ΒΏLa cadena estΓ‘ vacΓa?
if (empty ($cadena))
<
$correcto = false;
>
else
<
$nombreOapellido = mb_strtoupper ($cadena, «utf-8»);
$longitudCadena = mb_strlen ($cadena, «utf-8»);
Esta funciΓ³n falla con las letras acentuadas y con las eΓ±es. Por tanto, no sirve para los caracteres UTF-8.
El siguiente cΓ³digo falla para na cadena = «MarΓa MaΓ±as», no reconoce ni la «Γ» ni la «Γ±»:
// ΒΏLa cadena estΓ‘ vacΓa?
if (empty ($cadena))
<
$correcto = false;
>
else
<
$nombreOapellido = mb_strtoupper ($cadena, «utf-8»);
$longitudCadena = mb_strlen ($cadena, «utf-8»);
I needed a version of in_array() that supports wildcards in the haystack. Here it is:
$haystack = array( ‘*krapplack.de’ );
$needle = ‘www.krapplack.de’ ;
var_dump(in_array(‘invalid’, array(0,10,20)));
The above code gives true since the ‘invalid’ is getting converted to 0 and checked against the array(0,10,20)
but var_dump(in_array(‘invalid’, array(10,20))); gives ‘false’ since 0 not there in the array
A function to check an array of values within another array.
Second element ‘123’ of needles was found as first element of haystack, so it return TRUE.
If third parameter is not set to Strict then, the needle is found in haystack eventhought the values are not same. the limit behind the decimal seems to be 6 after which, the haystack and needle match no matter what is behind the 6th.
In PHP array function the in_array() function mainly used to check the item are available or not in array.
1. Non-strict validation
2. Strict validation
1. Non-strict validation:
This method to validate array with some negotiation. And it allow two parameters.
Note: the Example 1, we use only two parameter. Because we can’t mention `false` value. Because In default the in_array() take `false` as a boolean value.
In above example,
Example 1 : The `key1` is not value in the array. This is key of the array. So this scenario the in_array accept the search key as a value of the array.
Example 2: The value `577` is not in the value and key of the array. It is some similar to the value `579`. So this is also accepted.
So this reason this type is called non-strict function.
2. Strict validation
This method to validate array without any negotiation. And it have three parameters. If you only mention two parameter the `in_array()` function take as a non-strict validation.
This is return `true` only the search string is match exactly with the array value with case sensitivity.