<style>
.red{color:red;}
.green{color:green;}
</style>
<?php
function array2aiflag($inputString){
$arAIFlag = ["AGGR","NOMOVE","COWARD","NOATTSHINSU","NOATTCHUNJO","NOATTJINNO","ATTMOB","BERSERK","STONESKIN","GODSPEED","DEATHBLOW","REVIVE"];
$retValue = 0;
$arInputString = explode(",",$inputString);
for($i=0;$i<sizeof($arAIFlag);$i ) {
$tempString = $arAIFlag[$i];
for ($j=0;$j<30;$j ){
if(isset($arInputString[$j])){
$tempString2 = $arInputString[$j];
}else{
$tempString2 = $inputString;
}
if(strcmp($tempString2,$tempString) == 0){
$retValue =pow(2,$i);
}
if(strcmp($tempString2,"") == 0){
break;
}
}
}
unset($arInputString);
return $retValue;
}
function aiflag2array($flag,$target=[],$str=""){
$tar=["AGGR","NOMOVE","COWARD","NOATTSHINSU","NOATTCHUNJO","NOATTJINNO","ATTMOB","BERSERK","STONESKIN","GODSPEED","DEATHBLOW","REVIVE"];
for($x=0;$x<count($tar);$x ){
$target[pow(2,$x)]=$tar[$x];
}
for($i=count($tar)-1;$i>-1;$i--){
$pow = pow(2, $i);
if($pow < $flag){
$str = ",".$target[$pow].$str;
$flag = $flag-$pow;
}elseif($pow == $flag){
return "".$target[$pow].$str;
}
}
return "NONE";
}
$sample=["AGGR","AGGR,BERSERK","AGGR,BERSERK,DEATHBLOW,REVIVE","AGGR,BERSERK,STONESKIN","AGGR,BERSERK,STONESKIN,DEATHBLOW","AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE","AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE","AGGR,DEATHBLOW","AGGR,GODSPEED","AGGR,GODSPEED","AGGR,NOATTCHUNJO","AGGR,NOATTJINNO","AGGR,NOATTSHINSU","AGGR,NOMOVE","AGGR,REVIVE","AGGR,STONESKIN","BERSERK","BERSERK,STONESKIN","COWARD","NOMOVE","AGGR,NOMOVE,BERSERK,GODSPEED,DEATHBLOW","NOMOVE,STONESKIN","NOMOVE,STONESKIN","REVIVE"];
foreach($sample as $k=>$v){
$no1=array2aiflag($v);
$no2=array2aiflag(aiflag2array($no1));
if($v != aiflag2array($no1)){
echo '<a > OriginalData - <b>'.$v.' ['.$no1.']</b> - ReversData - <b>'.aiflag2array($no1).' ['.$no2.']</b><br>';
}else{
echo '<a > OriginalData - <b>'.$v.' ['.$no1.']</b> - ReversData - <b>'.aiflag2array($no1).' ['.$no2.']</b><br>';
}
}
?>
當我運行上面的代碼時,我將 24 個樣本資料轉換為折疊數字并列印出來。然后,當我想從資料庫中呼叫數字并將它們轉換回字串時,其中一些似乎是錯誤的。
結果:
OriginalData - AGGR [30] - ReversData - NOMOVE,COWARD,NOATTSHINSU,NOATTCHUNJO [30]
OriginalData - AGGR,BERSERK [129] - ReversData - AGGR,BERSERK [129]
OriginalData - AGGR,BERSERK,DEATHBLOW,REVIVE [3201] - ReversData - AGGR,BERSERK,DEATHBLOW,REVIVE [3201]
OriginalData - AGGR,BERSERK,STONESKIN [385] - ReversData - AGGR,BERSERK,STONESKIN [385]
OriginalData - AGGR,BERSERK,STONESKIN,DEATHBLOW [1409] - ReversData - AGGR,BERSERK,STONESKIN,DEATHBLOW [1409]
OriginalData - AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE [3457] - ReversData - AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE [3457]
OriginalData - AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE [3457] - ReversData - AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE [3457]
OriginalData - AGGR,DEATHBLOW [1025] - ReversData - AGGR,DEATHBLOW [1025]
OriginalData - AGGR,GODSPEED [513] - ReversData - AGGR,GODSPEED [513]
OriginalData - AGGR,GODSPEED [513] - ReversData - AGGR,GODSPEED [513]
OriginalData - AGGR,NOATTCHUNJO [17] - ReversData - AGGR,NOATTCHUNJO [17]
OriginalData - AGGR,NOATTJINNO [33] - ReversData - AGGR,NOATTJINNO [33]
OriginalData - AGGR,NOATTSHINSU [9] - ReversData - AGGR,NOATTSHINSU [9]
OriginalData - AGGR,NOMOVE [3] - ReversData - AGGR,NOMOVE [3]
OriginalData - AGGR,REVIVE [2049] - ReversData - AGGR,REVIVE [2049]
OriginalData - AGGR,STONESKIN [257] - ReversData - AGGR,STONESKIN [257]
OriginalData - BERSERK [3840] - ReversData - STONESKIN,GODSPEED,DEATHBLOW,REVIVE [3840]
OriginalData - BERSERK,STONESKIN [384] - ReversData - BERSERK,STONESKIN [384]
OriginalData - COWARD [120] - ReversData - NOATTSHINSU,NOATTCHUNJO,NOATTJINNO,ATTMOB [120]
OriginalData - NOMOVE [60] - ReversData - COWARD,NOATTSHINSU,NOATTCHUNJO,NOATTJINNO [60]
OriginalData - AGGR,NOMOVE,BERSERK,GODSPEED,DEATHBLOW [1667] - ReversData - AGGR,NOMOVE,BERSERK,GODSPEED,DEATHBLOW [1667]
OriginalData - NOMOVE,STONESKIN [258] - ReversData - NOMOVE,STONESKIN [258]
OriginalData - NOMOVE,STONESKIN [258] - ReversData - NOMOVE,STONESKIN [258]
OriginalData - REVIVE [61440] - ReversData - NONE [0]
需要逆向工程。aiflag2array 函式中的數字 30 有問題。
不應修改 array2aiflag 函式。aiflag2array 需要編輯。
如果您能幫我修復它,我將不勝感激。謝謝。
uj5u.com熱心網友回復:
好的,我認為這是一件好事。我必須說我錯過了背景關系,我不知道這將用于什么。背景關系對于理解代碼很重要。我認為這是某種游戲?
首先要做的是讓陣列定義不礙事:
$states = ["AGGR",
"NOMOVE",
"COWARD",
"NOATTSHINSU",
"NOATTCHUNJO",
"NOATTJINNO",
"ATTMOB",
"BERSERK",
"STONESKIN",
"GODSPEED",
"DEATHBLOW",
"REVIVE"];
$samples = ["AGGR",
"AGGR,BERSERK",
"AGGR,BERSERK,DEATHBLOW,REVIVE",
"AGGR,BERSERK,STONESKIN",
"AGGR,BERSERK,STONESKIN,DEATHBLOW",
"AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE",
"AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE",
"AGGR,DEATHBLOW",
"AGGR,GODSPEED",
"AGGR,GODSPEED",
"AGGR,NOATTCHUNJO",
"AGGR,NOATTJINNO",
"AGGR,NOATTSHINSU",
"AGGR,NOMOVE",
"AGGR,REVIVE",
"AGGR,STONESKIN",
"BERSERK",
"BERSERK,STONESKIN",
"COWARD",
"NOMOVE",
"AGGR,NOMOVE,BERSERK,GODSPEED,DEATHBLOW",
"NOMOVE,STONESKIN",
"NOMOVE,STONESKIN",
"REVIVE"];
我用$states和$samples。當然,您可以更改這些名稱。重要的是不要讓行太長,不要超過 80 - 100 個字符。
接下來是轉換 from 的代碼,我稱之為flags,tostates和其他方式:
function states2flags($userStates, $allStates)
{
$userFlags = 0;
$bit = 1;
foreach ($allStates as $state) {
if (in_array($state, $userStates)) {
$userFlags = $bit;
}
$bit <<= 1;
}
return $userFlags;
}
function flags2states($userFlags, $allStates)
{
$userStates = [];
$bit = 1;
foreach ($allStates as $state) {
if ($userFlags & $bit) {
$userStates[] = $state;
}
$bit <<= 1;
}
return $userStates;
}
The only special thing in here is the Bitwise Assignment Operator. No pow() is needed for working with powers of two.
Every function parameter is an array, this is intentional. It clearly is intended as an array, so why use strings? Alternatively you could choose to only work with strings, but don't mix arrays and strings, it is confusing.
I kept most of your test code, although the names have changed:
foreach($samples as $sample) {
$sampleStates = explode(",", $sample);
$sampleFlags = states2flags($sampleStates, $states);
$reverseStates = flags2states($sampleFlags, $states);
$reverseFlags = states2flags($reverseStates, $states);
$textColor = (count(array_diff($sampleStates, $reverseStates)) > 0) ? "red" : "green";
echo '<a hljs-variable">$textColor . '">' . $textColor . ' Original Data - <b>' . $sample .
' [' . $sampleFlags . ']</b> - Reverse Data - <b>' .
implode(",", flags2states($sampleFlags, $states)) . ' ['.$reverseFlags. ']</b><br>';
}
The output is:
green Original Data - AGGR [1] - Reverse Data - AGGR [1]
green Original Data - AGGR,BERSERK [129] - Reverse Data - AGGR,BERSERK [129]
green Original Data - AGGR,BERSERK,DEATHBLOW,REVIVE [3201] - Reverse Data - AGGR,BERSERK,DEATHBLOW,REVIVE [3201]
green Original Data - AGGR,BERSERK,STONESKIN [385] - Reverse Data - AGGR,BERSERK,STONESKIN [385]
green Original Data - AGGR,BERSERK,STONESKIN,DEATHBLOW [1409] - Reverse Data - AGGR,BERSERK,STONESKIN,DEATHBLOW [1409]
green Original Data - AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE [3457] - Reverse Data - AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE [3457]
green Original Data - AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE [3457] - Reverse Data - AGGR,BERSERK,STONESKIN,DEATHBLOW,REVIVE [3457]
green Original Data - AGGR,DEATHBLOW [1025] - Reverse Data - AGGR,DEATHBLOW [1025]
green Original Data - AGGR,GODSPEED [513] - Reverse Data - AGGR,GODSPEED [513]
green Original Data - AGGR,GODSPEED [513] - Reverse Data - AGGR,GODSPEED [513]
green Original Data - AGGR,NOATTCHUNJO [17] - Reverse Data - AGGR,NOATTCHUNJO [17]
green Original Data - AGGR,NOATTJINNO [33] - Reverse Data - AGGR,NOATTJINNO [33]
green Original Data - AGGR,NOATTSHINSU [9] - Reverse Data - AGGR,NOATTSHINSU [9]
green Original Data - AGGR,NOMOVE [3] - Reverse Data - AGGR,NOMOVE [3]
green Original Data - AGGR,REVIVE [2049] - Reverse Data - AGGR,REVIVE [2049]
green Original Data - AGGR,STONESKIN [257] - Reverse Data - AGGR,STONESKIN [257]
green Original Data - BERSERK [128] - Reverse Data - BERSERK [128]
green Original Data - BERSERK,STONESKIN [384] - Reverse Data - BERSERK,STONESKIN [384]
green Original Data - COWARD [4] - Reverse Data - COWARD [4]
green Original Data - NOMOVE [2] - Reverse Data - NOMOVE [2]
green Original Data - AGGR,NOMOVE,BERSERK,GODSPEED,DEATHBLOW [1667] - Reverse Data - AGGR,NOMOVE,BERSERK,GODSPEED,DEATHBLOW [1667]
green Original Data - NOMOVE,STONESKIN [258] - Reverse Data - NOMOVE,STONESKIN [258]
green Original Data - NOMOVE,STONESKIN [258] - Reverse Data - NOMOVE,STONESKIN [258]
green Original Data - REVIVE [2048] - Reverse Data - REVIVE [2048]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/449144.html
下一篇:在C#中計算三次方程的問題
