InArrayMissUse
warning on by default quick-fixGroup: Performance · PhpStorm name: InArrayMissUseInspection
Two wasteful in_array() shapes:
- searching the keys list built by
array_keys($a)— a direct key lookup (array_key_exists) avoids building the list; - searching a one-element array literal — that is just a comparison with the single element.
Example
php
<?php
function checks($role, $list, $map, $a, $b)
{
$r = [];
$r[] = in_array($role, ['admin']);
$r[] = in_array($role, array('admin'), TRUE);
$r[] = in_array($role, ['k' => 'admin'], false);
$r[] = !in_array($role, ['admin']);
$r[] = in_array($role, ['admin'], true) == false;
$r[] = false !== in_array($role, ['admin']);
$r[] = true != in_array($role, ['admin']);
$r[] = $b || in_array($role, ['admin']);
$r[] = in_array($a . $b, ['ab']);
$r[] = in_array($a ? $b : 0, [3], true);
$r[] = !in_array($role, array_keys($map), true);
$r[] = \in_array('id', array_keys($map));
$r[] = in_array($role, []);
$r[] = in_array($role, ['admin', 'owner']);
$r[] = in_array($role, $list);
$r[] = in_array($role, array_keys($map, 1));
return $r;
}php
<?php
function checks($role, $list, $map, $a, $b)
{
$r = [];
$r[] = $role == 'admin';
$r[] = $role === 'admin';
$r[] = $role == 'admin';
$r[] = $role != 'admin';
$r[] = $role !== 'admin';
$r[] = $role == 'admin';
$r[] = $role != 'admin';
$r[] = $b || $role == 'admin';
$r[] = ($a . $b) == 'ab';
$r[] = ($a ? $b : 0) === 3;
$r[] = !array_key_exists($role, $map);
$r[] = array_key_exists('id', $map);
$r[] = in_array($role, []);
$r[] = in_array($role, ['admin', 'owner']);
$r[] = in_array($role, $list);
$r[] = in_array($role, array_keys($map, 1));
return $r;
}Reported:
- line 5: Compare directly: '$role == 'admin''.
- line 6: Compare directly: '$role === 'admin''.
- line 7: Compare directly: '$role == 'admin''.
- line 8: Compare directly: '$role != 'admin''.
- line 9: Compare directly: '$role !== 'admin''.
- line 10: Compare directly: '$role == 'admin''.
- line 11: Compare directly: '$role != 'admin''.
- line 12: Compare directly: '$role == 'admin''.
- line 13: Compare directly: '($a . $b) == 'ab''.
- line 14: Compare directly: '($a ? $b : 0) === 3''.
- line 15: Look the key up directly with 'array_key_exists($role, $map)'.
- line 16: Look the key up directly with 'array_key_exists('id', $map)'.
Options
| Option | Type | Default | Effect |
|---|---|---|---|
FORCE_STRICT_COMPARISON | bool | false | When on, pattern C always produces ===/!==, whatever the 3rd argument. The EA fixture runs with it off. |
Comparison style (regular/yoda) is the global setting.
Configure
In custos.json:
json
{
"rules": {
"InArrayMissUse": {
"enabled": false,
"options": {
"FORCE_STRICT_COMPARISON": false
}
}
}
}Suppress
Before the statement or declaration (or the first statement of the file), either of:
php
// @custos-ignore InArrayMissUse
/**
* @noinspection InArrayMissUseInspection
*/