代码之家  ›  专栏  ›  技术社区  ›  Brandon Frohbieter

是否始终设置php关联数组值?

  •  0
  • Brandon Frohbieter  · 技术社区  · 14 年前
       $test['test'] = 'test';
       if(isset($test['test']['x']))
         return $test['test']['x'];
    

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

    我不能对这种行为置之不理。我一直在用isset()。请告知。

    2 回复  |  直到 14 年前
        1
  •  5
  •   BoltClock    14 年前

    这是因为您没有索引数组,而是在索引字符串。字符串是 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'] = array('x' => 'test');
    
    if (isset($test['test']['x']))
        return $test['test']['x'];
    

    当然,如果数组可能包含 NULL 值,或者要确保正在检查数组,请使用 array_key_exists() 而不是 isset() 正如西兰斯洛特所说。有点慢,但不会绊倒 无效的 值或其他可索引类型,如字符串和对象。

        2
  •  0
  •   matpie    14 年前

    使用 array_key_exists 用于测试数组键。

    它回来了 't' 因为所有字符串都可以作为数组和 'x' 将计算为0,这是变量中的第一个字母/值。