PHP多^2数组

PHP多^2数组,php,Php,对于这个标题我很抱歉。我真的被困在这个问题上了,我不知道如何用标题来表达 我有这个功能: public function users($id) { $users = array( 1 => "Leader", 2 => "General", 4 => "Marshall", 8 => "Captain",

对于这个标题我很抱歉。我真的被困在这个问题上了,我不知道如何用标题来表达

我有这个功能:

public function users($id) {
    $users = array(
                1 => "Leader",
                2 => "General",
                4 => "Marshall",
                8 => "Captain",
                16 => "Master",
                32 => "Member",
                64 => "Vendor",
                128 => "Justin Bieber",
                256 => "Nick Minaj",
                512 => "God"
     );
}
因此,我想知道如何在与ID(concatenate)对应的数组键内返回值

例如:如果我通过:
$this->users(19)
。应返回:
领导、将军、船长。


谢谢

快速而肮脏的解决方案可能如下所示:

public function users($id) {
    $users = array(
                1 => "Leader",
                2 => "General",
                4 => "Marshall",
                8 => "Captain",
                16 => "Master",
                32 => "Member",
                64 => "Vendor",
                128 => "Justin Bieber",
                256 => "Nick Minaj",
                512 => "God"
     );

  $out = [];
  $start = $i = max(array_keys($users));
  for( $i=$start; $i>=1; $i /= 2 ) {
   if( $id >= $i ){
     $out[] = $users[$i];
     $id -= $i;
   }
  }

  return implode( ',', array_reverse( $out ) );
}
public function users($id) {
    $users = array(
                1 => "Leader",
                2 => "General",
                4 => "Marshall",
                8 => "Captain",
                16 => "Master",
                32 => "Member",
                64 => "Vendor",
                128 => "Justin Bieber",
                256 => "Nick Minaj",
                512 => "God"
     );
     $bin = strrev(decbin($id));
     $len = strlen($bin);
     $return = array();
     for($i = 0; $i < $len; $i++){
         if($bin[$i] === '1'){
             $return[] = $users[pow(2, $i)];
         }
     }
     return implode(", ", $return);
}

然而,我认为数据结构应该改变。这种方式感觉很笨拙。

您需要这样做:

public function users($id) {
    $users = array(
                1 => "Leader",
                2 => "General",
                4 => "Marshall",
                8 => "Captain",
                16 => "Master",
                32 => "Member",
                64 => "Vendor",
                128 => "Justin Bieber",
                256 => "Nick Minaj",
                512 => "God"
     );

  $out = [];
  $start = $i = max(array_keys($users));
  for( $i=$start; $i>=1; $i /= 2 ) {
   if( $id >= $i ){
     $out[] = $users[$i];
     $id -= $i;
   }
  }

  return implode( ',', array_reverse( $out ) );
}
public function users($id) {
    $users = array(
                1 => "Leader",
                2 => "General",
                4 => "Marshall",
                8 => "Captain",
                16 => "Master",
                32 => "Member",
                64 => "Vendor",
                128 => "Justin Bieber",
                256 => "Nick Minaj",
                512 => "God"
     );
     $bin = strrev(decbin($id));
     $len = strlen($bin);
     $return = array();
     for($i = 0; $i < $len; $i++){
         if($bin[$i] === '1'){
             $return[] = $users[pow(2, $i)];
         }
     }
     return implode(", ", $return);
}
公共功能用户($id){
$users=array(
1=>“领导者”,
2=>“一般”,
4=>“马歇尔”,
8=>“船长”,
16=>“主控”,
32=>“成员”,
64=>“供应商”,
128=>“贾斯汀·比伯”,
256=>“Nick Minaj”,
512=>“上帝”
);
$bin=strev(decbin($id));
$len=strlen($bin);
$return=array();
对于($i=0;$i<$len;$i++){
如果($bin[$i]=='1'){
$return[]=$users[pow(2,$i)];
}
}
返回内爆(“,”,$return);
}

一点也不清楚……请详细描述您不确定的内容,哪些逻辑
$this->用户(19)
可以返回
领导、将军、大师。
。您能更好地解释一下吗?似乎希望返回数组键与传递给函数的参数相加的所有字符串。对吗?对于
$this->users(19)
-获取总和为19的键。是的。。。如果我通过了ID 19,将返回首领、将军和大师,因为1+2+16=19。这就是我需要的。非常感谢。您应该使返回函数比总是从512开始更具动态性,类似于
$i=max(array_keys($users))此外,您的函数将以错误的顺序返回值,它们将按如下方式返回:
Master、General、Leader