var_dump()してみれば分かることもあります。
php
1<?php
2$users[] = array('apple'=>'りんご', 'peach'=>'もも', 'pear'=>'なし');
3var_dump($users);
4
5/*
6array(1) {
7 [0]=>
8 array(3) {
9 ["apple"]=>
10 string(9) "りんご"
11 ["peach"]=>
12 string(6) "もも"
13 ["pear"]=>
14 string(6) "なし"
15 }
16*/
これでは$users['apple']
に何もないのは当然ですね。
変数名[キー]
に対して代入すると、指定したキーにして代入するということになるのはご存知かもしれませんが、
キーが空の場合は、現在の配列の0番目から順番に代入していくことになります。
ので、おそらく提示の配列は初めて[]に代入されるので0番目に入るわけですね。
つまり左辺に []と書いても初期化ではないということです。初期化したい場合は右辺に初期化の値を書きます。
質問者さんはこうしたかったのではないでしょうか。
php
1<?php
2$users = []; // array()と同義。今はこちらの方が主流
3$users = ['apple'=>'りんご', 'peach'=>'もも', 'pear'=>'なし'];
4var_dump($users);
5/*
6array(3) {
7 ["apple"]=>
8 string(9) "りんご"
9 ["peach"]=>
10 string(6) "もも"
11 ["pear"]=>
12 string(6) "なし"
13}
14*/
蛇足ですが、配列を検査するときはarray_key_exists()などで1つかませた方が丁寧で、エラーが出にくくなりますし、エラーが出ない場合の問題切り分けもしやすくなります。
(あとできれば比較は厳密比較===で)
php
1<?php
2$users = []; // array()と同義。今はこちらの方が主流
3$users = ['apple'=>'りんご', 'peach'=>'もも', 'pear'=>'なし'];
4
5if(array_key_exists('apple',$users) && $users['apple'] === ""){
6 echo "空文字";
7} else {
8 echo "空文字でない";
9}
10
11// 空文字でない
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。