php关联数组值总是设置?

时间:2010-11-12 18:18:27

标签: php multidimensional-array

   $test['test'] = 'test';
   if(isset($test['test']['x']))
     return $test['test']['x'];

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

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

2 个答案:

答案 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,这是变量中的第一个字母/值。