If the index is non-numeric and is not quoted, it will be treated as a constant. If that constant is already defined, it will use that defined value. If it is not defined, it will automatically be defined at that point to have a value the same as its name, and raise a notice-level warning. Therefore, it may or may not work depending on your code, but even if it works, it's sloppy coding that may cause an error during later modifications. Therefore, you should always quote associative array keys (unless you are intentionally using a constant for the key).
The one exception is if you are using an array variable directly within a double-quoted string, in which case you must either omit the quotes, or else use "complex" (curly brace) notation.
$str = "foo $array[key] bar"; // correct but confusing
$str = "foo {$array['key']} bar"; // correct but more typing
$str = "foo " . $array['key'] . " bar"; // correct but even more typing
So choose your poison in that case. 🙂