Php 双循环从数组中提取信息

Php 双循环从数组中提取信息,php,Php,我有一个相当大的数组。我需要从“citis”和“avatarScores”中提取信息。avatarScores的信息与citis的信息相关 例如,城市1属于玩家1,玩家1的积分出现在化身核心中 花旗集团的排名总是17位,但不一定要有17个城市。 阿凡达核心阵列是城市实际存在的大小 问题是我如何做双重foreach,从两个数组中提取信息,并使它们很好地关联,以便每个城市的信息都是正确的。 我做了很多测试,但是重复记录不断出现。在这个数组中只有10个城市,我总是得到大约100个城市(重复信息) 阵列

我有一个相当大的数组。我需要从“citis”和“avatarScores”中提取信息。avatarScores的信息与citis的信息相关

例如,城市1属于玩家1,玩家1的积分出现在化身核心中

花旗集团的排名总是17位,但不一定要有17个城市。 阿凡达核心阵列是城市实际存在的大小

问题是我如何做双重foreach,从两个数组中提取信息,并使它们很好地关联,以便每个城市的信息都是正确的。 我做了很多测试,但是重复记录不断出现。在这个数组中只有10个城市,我总是得到大约100个城市(重复信息)

阵列

array(6) {
  [0]=>
  array(2) {
    [0]=>
    string(20) "updateBackgroundData"
    [1]=>
    object(stdClass)#2 (37) {
      ["id"]=>
      string(2) "74"
      ["type"]=>
      int(5)
      ["name"]=>
      string(8) "Shaymios"
      ["xCoord"]=>
      string(2) "44"
      ["yCoord"]=>
      string(2) "47"
      ["tradegood"]=>
      string(1) "3"
      ["tradegoodTarget"]=>
      string(8) "noluxury"
      ["resourceLevel"]=>
      string(2) "26"
      ["tradegoodLevel"]=>
      string(2) "21"
      ["wonder"]=>
      string(1) "2"
      ["wonderLevel"]=>
      string(1) "4"
      ["wonderName"]=>
      string(22) "Gruta Sagrada de Hades"
      ["showResourceWorkers"]=>
      int(0)
      ["showTradegoodWorkers"]=>
      int(0)
      ["showAgora"]=>
      int(1)
      ["canEnterResource"]=>
      int(1)
      ["canEnterTradegood"]=>
      int(1)
      ["tradegoodEndUpgradeTime"]=>
      int(0)
      ["resourceEndUpgradeTime"]=>
      int(0)
      ["wonderEndUpgradeTime"]=>
      int(0)
      ["isOwnCityOnIsland"]=>
      bool(true)
      ["cities"]=>
      array(17) {
        [0]=>
        object(stdClass)#3 (6) {
          ["id"]=>
          int(-1)
          ["type"]=>
          string(10) "buildplace"
          ["name"]=>
          string(7) "Terreno"
          ["level"]=>
          int(0)
          ["viewAble"]=>
          int(1)
          ["buildplace_type"]=>
          string(6) "normal"
        }
        [1]=>
        object(stdClass)#4 (13) {
          ["type"]=>
          string(4) "city"
          ["name"]=>
          string(7) "Nothing"
          ["id"]=>
          int(64501)
          ["level"]=>
          string(2) "10"
          ["ownerId"]=>
          string(5) "27450"
          ["ownerName"]=>
          string(7) "Paisano"
          ["ownerAllyId"]=>
          string(3) "321"
          ["ownerAllyTag"]=>
          string(5) "CROMA"
          ["hasTreaties"]=>
          int(0)
          ["actions"]=>
          array(0) {
          }
          ["state"]=>
          string(0) ""
          ["viewAble"]=>
          int(0)
          ["infestedByPlague"]=>
          bool(false)
        }
        [2]=>
        object(stdClass)#5 (6) {
          ["id"]=>
          int(-1)
          ["type"]=>
          string(10) "buildplace"
          ["name"]=>
          string(7) "Terreno"
          ["level"]=>
          int(0)
          ["viewAble"]=>
          int(1)
          ["buildplace_type"]=>
          string(6) "normal"
        }
        [3]=>
        object(stdClass)#6 (6) {
          ["id"]=>
          int(-1)
          ["type"]=>
          string(10) "buildplace"
          ["name"]=>
          string(7) "Terreno"
          ["level"]=>
          int(0)
          ["viewAble"]=>
          int(1)
          ["buildplace_type"]=>
          string(6) "normal"
        }
        [4]=>
        object(stdClass)#7 (12) {
          ["type"]=>
          string(4) "city"
          ["name"]=>
          string(5) "Polis"
          ["id"]=>
          int(64437)
          ["level"]=>
          string(1) "1"
          ["ownerId"]=>
          string(5) "28312"
          ["ownerName"]=>
          string(14) "Agamemnon-3798"
          ["ownerAllyId"]=>
          string(1) "0"
          ["hasTreaties"]=>
          int(0)
          ["actions"]=>
          array(0) {
          }
          ["state"]=>
          string(0) ""
          ["viewAble"]=>
          int(2)
          ["infestedByPlague"]=>
          bool(false)
        }
        [5]=>
        object(stdClass)#8 (13) {
          ["type"]=>
          string(4) "city"
          ["name"]=>
          string(9) "Evaroschi"
          ["id"]=>
          int(5405)
          ["level"]=>
          string(2) "26"
          ["ownerId"]=>
          string(4) "3739"
          ["ownerName"]=>
          string(6) "cesar2"
          ["ownerAllyId"]=>
          string(3) "324"
          ["ownerAllyTag"]=>
          string(4) "-T1-"
          ["hasTreaties"]=>
          int(0)
          ["actions"]=>
          array(0) {
          }
          ["state"]=>
          string(0) ""
          ["viewAble"]=>
          int(0)
          ["infestedByPlague"]=>
          bool(false)
        }
        [6]=>
        object(stdClass)#9 (6) {
          ["id"]=>
          int(-1)
          ["type"]=>
          string(10) "buildplace"
          ["name"]=>
          string(7) "Terreno"
          ["level"]=>
          int(0)
          ["viewAble"]=>
          int(1)
          ["buildplace_type"]=>
          string(6) "normal"
        }
        [7]=>
        object(stdClass)#10 (13) {
          ["type"]=>
          string(4) "city"
          ["name"]=>
          string(9) "Cristal I"
          ["id"]=>
          int(849)
          ["level"]=>
          string(2) "27"
          ["ownerId"]=>
          string(3) "849"
          ["ownerName"]=>
          string(7) "DaniloJ"
          ["ownerAllyId"]=>
          string(1) "2"
          ["ownerAllyTag"]=>
          string(4) "-ZT-"
          ["hasTreaties"]=>
          int(0)
          ["actions"]=>
          array(0) {
          }
          ["state"]=>
          string(0) ""
          ["viewAble"]=>
          int(0)
          ["infestedByPlague"]=>
          bool(false)
        }
        [8]=>
        object(stdClass)#11 (6) {
          ["id"]=>
          int(-1)
          ["type"]=>
          string(10) "buildplace"
          ["name"]=>
          string(7) "Terreno"
          ["level"]=>
          int(0)
          ["viewAble"]=>
          int(1)
          ["buildplace_type"]=>
          string(6) "normal"
        }
        [9]=>
        object(stdClass)#12 (12) {
          ["type"]=>
          string(4) "city"
          ["name"]=>
          string(5) "Polis"
          ["id"]=>
          int(64892)
          ["level"]=>
          string(1) "1"
          ["ownerId"]=>
          string(5) "28488"
          ["ownerName"]=>
          string(8) "-NAGATO-"
          ["ownerAllyId"]=>
          string(1) "0"
          ["hasTreaties"]=>
          int(0)
          ["actions"]=>
          array(0) {
          }
          ["state"]=>
          string(8) "inactive"
          ["viewAble"]=>
          int(0)
          ["infestedByPlague"]=>
          bool(false)
        }
        [10]=>
        object(stdClass)#13 (13) {
          ["type"]=>
          string(4) "city"
          ["name"]=>
          string(4) "0001"
          ["id"]=>
          int(40246)
          ["level"]=>
          string(2) "20"
          ["ownerId"]=>
          string(5) "18230"
          ["ownerName"]=>
          string(13) "NeWRomerOrdeR"
          ["ownerAllyId"]=>
          string(3) "307"
          ["ownerAllyTag"]=>
          string(4) "ROMA"
          ["hasTreaties"]=>
          int(0)
          ["actions"]=>
          array(0) {
          }
          ["state"]=>
          string(0) ""
          ["viewAble"]=>
          int(0)
          ["infestedByPlague"]=>
          bool(false)
        }
        [11]=>
        object(stdClass)#14 (12) {
          ["type"]=>
          string(4) "city"
          ["name"]=>
          string(5) "Polis"
          ["id"]=>
          int(64942)
          ["level"]=>
          string(1) "1"
          ["ownerId"]=>
          string(5) "28503"
          ["ownerName"]=>
          string(13) "AnitaFacilita"
          ["ownerAllyId"]=>
          string(1) "0"
          ["hasTreaties"]=>
          int(0)
          ["actions"]=>
          array(0) {
          }
          ["state"]=>
          string(8) "inactive"
          ["viewAble"]=>
          int(0)
          ["infestedByPlague"]=>
          bool(false)
        }
        [12]=>
        object(stdClass)#15 (12) {
          ["type"]=>
          string(4) "city"
          ["name"]=>
          string(5) "Polis"
          ["id"]=>
          int(64988)
          ["level"]=>
          string(1) "1"
          ["ownerId"]=>
          string(5) "28523"
          ["ownerName"]=>
          string(9) "Sklavidel"
          ["ownerAllyId"]=>
          string(1) "0"
          ["hasTreaties"]=>
          int(0)
          ["actions"]=>
          array(0) {
          }
          ["state"]=>
          string(4) "noob"
          ["viewAble"]=>
          int(0)
          ["infestedByPlague"]=>
          bool(false)
        }
        [13]=>
        object(stdClass)#16 (12) {
          ["type"]=>
          string(4) "city"
          ["name"]=>
          string(5) "Polis"
          ["id"]=>
          int(63482)
          ["level"]=>
          string(2) "14"
          ["ownerId"]=>
          string(5) "27754"
          ["ownerName"]=>
          string(10) "OL-Fredy97"
          ["ownerAllyId"]=>
          string(1) "0"
          ["hasTreaties"]=>
          int(0)
          ["actions"]=>
          array(0) {
          }
          ["state"]=>
          string(0) ""
          ["viewAble"]=>
          int(0)
          ["infestedByPlague"]=>
          bool(false)
        }
        [14]=>
        object(stdClass)#17 (6) {
          ["id"]=>
          int(-1)
          ["type"]=>
          string(10) "buildplace"
          ["name"]=>
          string(7) "Terreno"
          ["level"]=>
          int(0)
          ["viewAble"]=>
          int(1)
          ["buildplace_type"]=>
          string(6) "normal"
        }
        [15]=>
        object(stdClass)#18 (13) {
          ["type"]=>
          string(4) "city"
          ["name"]=>
          string(6) "Atenas"
          ["id"]=>
          int(32646)
          ["level"]=>
          string(2) "24"
          ["ownerId"]=>
          string(5) "14700"
          ["ownerName"]=>
          string(7) "Charles"
          ["ownerAllyId"]=>
          string(3) "307"
          ["ownerAllyTag"]=>
          string(4) "ROMA"
          ["hasTreaties"]=>
          int(0)
          ["actions"]=>
          array(0) {
          }
          ["state"]=>
          string(0) ""
          ["viewAble"]=>
          int(0)
          ["infestedByPlague"]=>
          bool(false)
        }
        [16]=>
        object(stdClass)#19 (6) {
          ["id"]=>
          int(-1)
          ["type"]=>
          string(10) "buildplace"
          ["name"]=>
          string(7) "Terreno"
          ["level"]=>
          int(0)
          ["viewAble"]=>
          int(1)
          ["buildplace_type"]=>
          string(7) "premium"
        }
      }
      ["barbarians"]=>
      object(stdClass)#20 (11) {
        ["invisible"]=>
        int(0)
        ["actionTitle"]=>
        string(55) "¡Ninguna tropa/barco mercante disponible para saquear!"
        ["actionClass"]=>
        string(19) "plundering disabled"
        ["actionLink"]=>
        string(0) ""
        ["count"]=>
        int(1)
        ["wallLevel"]=>
        int(0)
        ["level"]=>
        int(1)
        ["underAttack"]=>
        int(0)
        ["isTradegoodSiege"]=>
        int(0)
        ["city"]=>
        string(8) "kingOlaf"
        ["destroyed"]=>
        int(0)
      }
      ["avatarScores"]=>
      object(stdClass)#22 (10) {
        ["849"]=>
        object(stdClass)#21 (6) {
          ["avatar_id"]=>
          string(3) "849"
          ["place"]=>
          string(1) "7"
          ["building_score_main"]=>
          string(11) "379,322,313"
          ["research_score_main"]=>
          string(10) "72,145,880"
          ["army_score_main"]=>
          string(7) "250,190"
          ["trader_score_secondary"]=>
          string(10) "12,848,160"
        }
        ["3739"]=>
        object(stdClass)#23 (6) {
          ["avatar_id"]=>
          string(5) "3,739"
          ["place"]=>
          string(3) "165"
          ["building_score_main"]=>
          string(10) "60,479,333"
          ["research_score_main"]=>
          string(9) "7,276,760"
          ["army_score_main"]=>
          string(7) "199,960"
          ["trader_score_secondary"]=>
          string(9) "4,120,270"
        }
        ["14700"]=>
        object(stdClass)#24 (6) {
          ["avatar_id"]=>
          string(6) "14,700"
          ["place"]=>
          string(3) "237"
          ["building_score_main"]=>
          string(10) "24,048,522"
          ["research_score_main"]=>
          string(9) "7,276,760"
          ["army_score_main"]=>
          string(7) "380,000"
          ["trader_score_secondary"]=>
          string(9) "7,027,608"
        }
        ["18230"]=>
        object(stdClass)#25 (6) {
          ["avatar_id"]=>
          string(6) "18,230"
          ["place"]=>
          string(3) "243"
          ["building_score_main"]=>
          string(10) "26,427,220"
          ["research_score_main"]=>
          string(9) "3,953,400"
          ["army_score_main"]=>
          string(7) "472,620"
          ["trader_score_secondary"]=>
          string(9) "2,657,737"
        }
        ["27450"]=>
        object(stdClass)#26 (6) {
          ["avatar_id"]=>
          string(6) "27,450"
          ["place"]=>
          string(3) "334"
          ["building_score_main"]=>
          string(9) "6,161,438"
          ["research_score_main"]=>
          string(7) "891,972"
          ["army_score_main"]=>
          string(7) "144,860"
          ["trader_score_secondary"]=>
          string(6) "41,764"
        }
        ["27754"]=>
        object(stdClass)#27 (6) {
          ["avatar_id"]=>
          string(6) "27,754"
          ["place"]=>
          string(3) "349"
          ["building_score_main"]=>
          string(9) "4,536,533"
          ["research_score_main"]=>
          string(7) "702,972"
          ["army_score_main"]=>
          string(6) "20,660"
          ["trader_score_secondary"]=>
          string(7) "125,021"
        }
        ["28312"]=>
        object(stdClass)#28 (6) {
          ["avatar_id"]=>
          string(6) "28,312"
          ["place"]=>
          string(3) "551"
          ["building_score_main"]=>
          string(1) "0"
          ["research_score_main"]=>
          string(1) "0"
          ["army_score_main"]=>
          string(1) "0"
          ["trader_score_secondary"]=>
          string(6) "61,843"
        }
        ["28488"]=>
        object(stdClass)#29 (6) {
          ["avatar_id"]=>
          string(6) "28,488"
          ["place"]=>
          string(3) "552"
          ["building_score_main"]=>
          string(1) "0"
          ["research_score_main"]=>
          string(1) "0"
          ["army_score_main"]=>
          string(1) "0"
          ["trader_score_secondary"]=>
          string(6) "18,439"
        }
        ["28503"]=>
        object(stdClass)#30 (6) {
          ["avatar_id"]=>
          string(6) "28,503"
          ["place"]=>
          string(3) "555"
          ["building_score_main"]=>
          string(1) "0"
          ["research_score_main"]=>
          string(1) "0"
          ["army_score_main"]=>
          string(1) "0"
          ["trader_score_secondary"]=>
          string(6) "14,262"
        }
        ["28523"]=>
        object(stdClass)#31 (6) {
          ["avatar_id"]=>
          string(6) "28,523"
          ["place"]=>
          string(3) "498"
          ["building_score_main"]=>
          string(1) "0"
          ["research_score_main"]=>
          string(1) "0"
          ["army_score_main"]=>
          string(3) "360"
          ["trader_score_secondary"]=>
          string(6) "10,879"
        }
      }
      ["specialServerBadges"]=>
      array(0) {
      }
      ["selectedCityParameters"]=>
      array(0) {
      }
      ["island"]=>
      string(2) "74"
      ["isHeliosTowerBuilt"]=>
      bool(false)
      ["heliosTop"]=>
      int(1)
      ["heliosMid"]=>
      int(1)
      ["heliosBase"]=>
      int(1)
      ["heliosName"]=>
      string(15) "Ruinas de torre"
      ["heliosTooltip"]=>
      string(24) "Torre de Helios inactiva"
      ["heliosActive"]=>
      int(0)
      ["showResourceBonusIcon"]=>
      int(0)
      ["showTradegoodBonusIcon"]=>
      int(0)
      ["walkers"]=>
      object(stdClass)#32 (1) {
        ["add"]=>
        array(0) {
        }
      }
    }
  }
  [1]=>
  array(2) {
    [0]=>
    string(18) "updateTemplateData"
    [1]=>
    string(0) ""
  }
  [2]=>
  array(2) {
    [0]=>
    string(9) "popupData"
    [1]=>
    NULL
  }
  [3]=>
  array(2) {
    [0]=>
    string(17) "ingameCounterData"
    [1]=>
    NULL
  }
  [4]=>
  array(2) {
    [0]=>
    string(23) "removeIngameCounterData"
    [1]=>
    NULL
  }
  [5]=>
  array(2) {
    [0]=>
    string(14) "updateBacklink"
    [1]=>
    NULL
  }
}
要提取的代码

$owners = [];
foreach($final[0][1]->cities as $city){

$owner = "";
$allyTag = "";
$namecity = "";
$citylevel ="";
$idowner = "";

if(isset($city->ownerName)){
    $owner = $city->ownerName;
if(isset($city->ownerId)){
    $idowner = $city->ownerId;  
if (isset($city->name)) {
    $namecity = $city->name;
if (isset($city->level)) {
    $citylevel = $city->level;
if(isset($city->ownerAllyTag)){
    $allyTag = $city->ownerAllyTag;
}

array_push($owners, ["idowner"=>$idowner, "citylevel"=>$citylevel, "owner"=>$owner, "allyTag" => $allyTag, "namecity" => $namecity]);


}}}}

}
来自avatarscores的代码,必须与上面的代码统一

$vavatar_id = "";
$vplace = "";
$vbuilding_score_main = "";
$vresearch_score_main = "";
$varmy_score_main = "";
$vtrader_score_secondary = "";

if(isset($scores->avatar_id)){
    $vavatar_id = $scores->avatar_id;
}
if(isset($scores->place)){
    $vplace = $scores->place;
}
if(isset($scores->building_score_main)){
    $vbuilding_score_main = $scores->building_score_main;
}
if(isset($scores->research_score_main)){
    $vresearch_score_main = $scores->research_score_main;
}
if(isset($scores->army_score_main)){
    $varmy_score_main = $scores->army_score_main;
}
if(isset($scores->trader_score_secondary)){
    $vtrader_score_secondary = $scores->trader_score_secondary;
}

array_push($final, ["avatar_id"=>$vavatar_id,"place"=>$vplace,"building_score_main"=>$vbuilding_score_main,"research_score_main"=>$vresearch_score_main,"army_score_main"=>$varmy_score_main,"trader_score_secondary"=>$vtrader_score_secondary ]);
}

循环浏览
avatarScores
数组,然后在
$owner
数组的
idowner
字段中搜索密钥

foreach (foreach($final[0][1]->avatarScores as $avatarOwner => $scores) {
    $vavatar_id = "";
    $vplace = "";
    $vbuilding_score_main = "";
    $vresearch_score_main = "";
    $varmy_score_main = "";
    $vtrader_score_secondary = "";
    $city = null;
    foreach ($owners as $owner) {
        if ($owner['idowner'] == $avatarOwner) {
            $city = $owner;
            break;
        }
    }
    
    if(isset($scores->avatar_id)){
        $vavatar_id = $scores->avatar_id;
    }
    if(isset($scores->place)){
        $vplace = $scores->place;
    }
    if(isset($scores->building_score_main)){
        $vbuilding_score_main = $scores->building_score_main;
    }
    if(isset($scores->research_score_main)){
        $vresearch_score_main = $scores->research_score_main;
    }
    if(isset($scores->army_score_main)){
        $varmy_score_main = $scores->army_score_main;
    }
    if(isset($scores->trader_score_secondary)){
        $vtrader_score_secondary = $scores->trader_score_secondary;
    }
}

《阿凡达》的分数和城市有什么关系?它们是按顺序排列的,花旗银行的数量是17家,但只有10家,其余7家是“空的”。第一个citi是第一个avatarscore,第二个citi,第二个位置的标点等等。我注意到城市中有一个
所有者ID
字段,这些字段似乎与
avatarscore
数组的键匹配。这似乎是一种更可靠的联系方式。