这个按位 OR 在这个奇怪的数组键构造中做了什么?

php
2022-08-30 12:55:41

有人可以向我解释这是什么意思吗?我从未见过这种结构 - 取自Prestashop文档

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

$language包含以下项:

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

结果是它取$language[“id_lang”] - 1的值。但是我不了解语法,也找不到任何关于它的文档。


答案 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

基本上,如果你“按位或”任何东西本身,你得到原始值。这种属性在数学中称为幂等性。欲了解更多信息,请阅读:

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


答案 2

这样做的作用是对字符串“id_lang”中字符的ASCII值使用按位运算符,尽管他们为什么要这样做超出了我的范围,因为结果总是相同的。

为了详细说明一下,假设(为了方便起见)我们使用ASCII,其中每个字符都编码为单个字节。让我们来看看当它对第一个字符的二进制表示进行比较时会发生什么(i是,在二进制中是):10501101001

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

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


推荐