Skip to content

InArrayMissUse ​

warning on by default quick-fix

Group: 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 ​

OptionTypeDefaultEffect
FORCE_STRICT_COMPARISONboolfalseWhen 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
 */

Released under the MIT License. Rule catalogue modelled on Php Inspections (EA Extended); independent clean-room implementation.