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