将数组转换为十进制

时间:2019-02-14 14:08:17

标签: php bitmap

我有此代码:

public function get_names($number){
  $names = array(
    'None',
    'Anton',
    'bertha',
    'Cesa',
    'Dori',
    'Egon',
    'Frank',
    'Gollum',
    'Hans',
    'Kane',
    'Linus',
    'Moose',
    'Nandor',
    'Oliver',
    'Paul',
    'Reese');

  $bin = strrev(decbin($number));
  $len = strlen($bin);
  $output = array();
  foreach(str_split($bin) as $key=>$char)
  {
    if ($key == sizeof($names)){
      break;
    }
    if($char == 1)
    {
      array_push($output,$names[$key]);     
    }
  }
  return $output;
}

现在我用数字调用该函数-假设-32256,我将得到一个数组,其中包含“凯恩,莱纳斯,穆斯,南多,奥利弗,保罗”。

谁能告诉我我要给定名称数组并想要得到包含特定位的数字时该怎么办?恰恰相反。

我发现该代码可以正常工作。但是反之亦然。

谢谢!

安德烈亚斯

编辑:例如,我想知道小数与“安东,伯莎,切萨”的数组。我想将它们存储在数据库中,而不是每次都存储具有名称的数组。当我需要名称时,我只需从数据库中获取十进制数字,然后使用函数即可获取名称数组。

1 个答案:

答案 0 :(得分:2)

如果仅将$names数组中的位置作为位位置,则将2提升到该位置以为其提供正确的位位置,并保持找到的项目的总数。

$input = ["Cesa", "Gollum", "Hans"];
$output = 0;
foreach ( $input as $digit )    {
    $output += pow(2,array_search($digit, $names ));
}
echo $output;   // 392

使用

$input = ["Kane", "Linus", "Moose", "Nandor", "Oliver", "Paul"];

给予

32256

或者正如Barmar在他的评论中指出的那样,您可以通过使用array_flip()反转名称数组来保存查找,这意味着查找每个键将给出数组中的位置...

$output = 0;
$names = array_flip($names);
foreach ( $input as $digit )    {
    $output += pow(2,$names[$digit]);
}
echo $output;