php关联数组值总是设置?

Orb*_*bit 0 php multidimensional-array

   $test['test'] = 'test';
   if(isset($test['test']['x']))
     return $test['test']['x'];
Run Code Online (Sandbox Code Playgroud)

无论指定为维度2,此语句都会返回$ test ['test'](在本例中为't')中字符串的第一个字符.

我无法绕过这种行为.我一直使用isset().请指教.

Bol*_*ock 5

发生这种情况是因为您没有索引数组,而是索引字符串.字符串不是 PHP中的数组.它们恰好与数组共享索引的概念,但实际上是字符序列,即使PHP中没有不同的char数据类型.

在这种情况下,由于字符串仅以数字方式索引,'x'因此将转换为整数,从而导致0.因此PHP正在寻找$test['test'][0].另外$test只是一个单维数组,假设'test'是唯一的内部键.

与你的问题不太相关,但如果你尝试这样的东西,你应该得到'e',因为当转换'1x'为整数时,PHP会丢弃任何不是数字的东西以及其后的所有内容:

// This actually returns $test['test'][1]
return $test['test']['1x'];
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找$test数组的第二个维度,那么$test['test']它本身就需要是一个数组.这将按预期工作:

$test['test'] = array('x' => 'test');

if (isset($test['test']['x']))
    return $test['test']['x'];
Run Code Online (Sandbox Code Playgroud)

当然,如果您的数组可能包含NULL值,或者您想确保检查数组,请使用array_key_exists()而不是isset()像sirlancelot建议的那样.它的速度慢得多,但不会在NULL值或其他可索引类型(如字符串和对象)上跳闸.