$test['test'] = 'test';
if(isset($test['test']['x']))
return $test['test']['x'];
此语句返回$ test ['test'](在本例中为't')中字符串的第一个字符,无论指定为维度2。
我无法绕过这种行为。我一直使用isset()。请指教。
答案 0 :(得分: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'];
如果您正在寻找$test
数组的第二维,$test['test']
本身需要是一个数组。这将按预期工作:
$test['test'] = array('x' => 'test');
if (isset($test['test']['x']))
return $test['test']['x'];
当然,如果您的数组可能包含NULL
个值,或者您想确保检查数组,请使用array_key_exists()
代替isset()
作为sirlancelot建议。它的速度慢得多,但不会在NULL
值或其他可索引类型(如字符串和对象)上跳闸。
答案 1 :(得分:0)
使用array_key_exists
测试数组键。
它返回't'
因为所有字符串都可以被视为数组,而'x'
将评估为0,这是变量中的第一个字母/值。