在这个奇怪的数组键构造中,这个按位“或”是什么?

有人可以向我解释这是什么意思? 我从来没有见过这种构造 – 取自Prestashop文档

foreach ( $languages as $language ) { echo '<div id="test_' . $language['id_lang'|'id_lang'] .... // <-- What the?? // ... } 

$语言包含以下键:

 Array ( [id_lang] => 1 [name] => English (English) // and others... ) 

其结果是,它需要$ language [“id_lang”] – 1的值。但我不明白的语法,并找不到任何有关它的文档。

这个php -a会话表明它完全没有意义:

 php > $value = 'something'|'something'; php > echo $value; something php > $arr = array('abc' => 1, 'def' => 2); php > echo $arr['abc'|'abc']; 1 php > echo $arr['def'|'def']; 2 

基本上,如果你自己“按比特”或任何东西,你会得到原来的价值。 这个性质在math中被称为幂等性 。 有关更多信息,请阅读:

老实说,这个代码的原始作者不知道他们在做什么。

这样做是在string“id_lang”中的字符的ASCII值上使用按位运算符,虽然为什么他们这样做超出了我,因为结果总是相同的。

为了阐述一点,让我们说(为了方便起见),我们使用ASCII,其中每个字符被编码为单个字节。 让我们来看看在比较第一个字符的二进制表示(i是105 ,二进制是01101001 )时会发生什么:

  "i": 01101001 OR "i": 01101001 ___________ = 01101001 = "i" 

0|0是0,1 1|1是1,所以不可避免地所有位保持不变。

没有做任何事情,奇怪的是。

 var_dump('id_lang'|'id_lang'); #=> string(7) "id_lang" 

http://ideone.com/zXdRMO

即使在做一些事情,在一个基于string的数组键上使用一个按位运算符,肯定会让我感觉到代码的味道。