2016-06-09 194 views
1

這是我的第一個問題!代碼縮短

$champion1greenwards = 0; 
$champion2greenwards = 0; 
$champion3greenwards = 0; 
$champion4greenwards = 0; 
$champion5greenwards = 0; 
$champion6greenwards = 0; 
$champion7greenwards = 0; 
$champion8greenwards = 0; 
$champion9greenwards = 0; 
$champion10greenwards = 0; 


foreach($json as $arrays) { 
     if (is_array($arrays)) { 
     foreach($arrays as $arrayx) { 
       foreach($arrayx as $arrayt) { 
         foreach($arrayt as $array) { 

      if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD' && $array['creatorId'] == '1') { 
      $champion1greenwards++; 
      } 
       if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD' && $array['creatorId'] == '2') { 
      $champion2greenwards++; 
      } 
       if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD' && $array['creatorId'] == '3') { 
      $champion3greenwards++; 
      } 
       if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD' && $array['creatorId'] == '4') { 
      $champion4greenwards++; 
      } 
       if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD' && $array['creatorId'] == '5') { 
      $champion5greenwards++; 
      } 
       if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD' && $array['creatorId'] == '6') { 
      $champion6greenwards++; 
      } 
       if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD' && $array['creatorId'] == '7') { 
      $champion7greenwards++; 
      } 
       if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD' && $array['creatorId'] == '8') { 
      $champion8greenwards++; 
      } 
        if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD' && $array['creatorId'] == '9') { 
      $champion9greenwards++; 
      } 
         if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD' && $array['creatorId'] == '10') { 
      $champion10greenwards++; 
      } 


     } 
       } 
     } 
     } 
    } 
$championgreenwards = array($champion1greenwards,$champion2greenwards,$champion3greenwards,$champion4greenwards,$champion5greenwards,$champion6greenwards,$champion7greenwards,$champion8greenwards,$champion9greenwards,$champion10greenwards); 

結果$ championgreenwards陣列:

Array 
(
    [0] => 0 
    [1] => 14 
    [2] => 0 
    [3] => 0 
    [4] => 20 
    [5] => 0 
    [6] => 16 
    [7] => 0 
    [8] => 0 
    [9] => 23 
) 

有了這個代碼,我算多少次冠軍1,2,3,4,5,6,7,8,9,10放在病房一張地圖,然後我用數據製作一個數組。但代碼太長了,我不知道如何縮短這段代碼。我找不到一個辦法。所以我來到了這裏。

+1

爲什麼使用10個變量,之後將其轉換爲一個數組?只需從頭開始使用數組 – tkausl

+0

你可以發佈'$ json'的例子嗎? – PetrHejda

+0

@PetrHejda它如此之大。我不能將它發佈到pastebin,因爲文件大小的規則。你爲什麼需要它?它有一堆[type] => WARD_PLACED的數組,我計算每個玩家的總和。我的代碼正在工作,但太長了。 – Heptagon

回答

5

事情是這樣的:

$greenwards = []; 
foreach($json as $arrays) { 
    if (is_array($arrays)) { 
    foreach($arrays as $arrayx) { 
     foreach($arrayx as $arrayt) { 
     foreach($arrayt as $array) { 
      if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD') { 
      $greenwards[$array['creatorId']]++; 
      } 
     } 
     } 
    } 
    } 
} 
+0

非常感謝你的工作:=) 我將綠色數組更改爲默認值10「0」值。並且'$ greenwards [$ array ['creatorId']] ++;'改爲'$ greenwards [$ array ['creatorId'] - 1] ++;'因此它變成我確切想要的。 – Heptagon

+0

然後,你可以@標記@ maximkou的答案接受:) –

+0

它的兩個工作我標記你的,因爲我從你的答案。做了一點改變。然後我看到了他的答案。 :) – Heptagon

2
$championgreenwards = array_fill(0, 10, 0); 

foreach($json as $arrays) { 
    if (!is_array($arrays)) { 
     continue; 
    } 

    foreach($arrays as $arrayx) { 
     foreach($arrayx as $arrayt) { 
      foreach($arrayt as $array) { 
       if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD') { 
        $championgreenwards[$array['creatorId']-1]++; 
       } 
      } 
     } 
    } 
} 

var_dump($championgreenwards); 

或者使用array_walk_recursive,像這樣:

array_walk_recursive($json, function ($array) use (&$championgreenwards) { 
    if (!is_array($array) || !isset($array['type']) || !isset($array['wardType'])) { 
     return; 
    } 

    if ($array['type'] == 'WARD_PLACED' && $array['wardType'] == 'SIGHT_WARD') { 
     $championgreenwards[$array['creatorId']-1]++; 
    } 
}); 
+0

非常感謝你的努力,我已經做到了,我只能打勾1回答這個。 – Heptagon