2016-06-09 176 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