2016-03-17 51 views
1

我使用JSON來存儲括號JSON解碼改變數組值

上支架存儲15場比賽 下支架存儲14場比賽 決賽具有3場比賽

結果我已解碼的JSON和要用給定的比賽號碼存儲新的結果並給出得分結果。我已經嘗試了foreach循環,唯一的問題是括號不是按循環分組,而是在每個結果之後不給出逗號。

echo json_encode($ results);

會發出

[0,0][0,0][0,0][0,0][3,5][0,0][0,0][0,0] 
[0,0][0,0][0,0][0,0] 
[0,0][0,0] 
[0,0] 

時,我希望它給了

[ 
    [[0,0],[0,0],[0,0],[0,0],[3,5],[0,0],[0,0],[0,0]], 
    [[0,0],[0,0],[0,0],[0,0]], 
    [[0,0],[0,0]], 
    [[0,0]] 
] 

第二個問題$匹配可變環通過幾輪 增量所以它發出:

1,2,3,4,5,6,7,8,1,2,3,4,1,2,1 

當我想讓它發出時

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 

任何幫助表示讚賞謝謝。以下是代碼:

<?php 

$upper_bracket_results = " 
[ 
[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], 
[[0,0],[0,0],[0,0],[0,0]], 
[[0,0],[0,0]], 
[[0,0]] 
] 
"; 

$lower_bracket_results = " 
[ 
[[0,0],[0,0],[0,0],[0,0]], 
[[0,0],[0,0],[0,0],[0,0]], 
[[0,0],[0,0]], 
[[0,0],[0,0]], 
[[0,0]], 
[[0,0]] 
] 
"; 

$final_bracket_results = " 
[ 
[[0,0],[0,0]], 
[[0,0]] 
] 
"; 


$json = "{\"results\" : [ {$upper_bracket_results} , {$lower_bracket_results} , {$final_bracket_results} ]}"; 

$allResults = json_decode($json, true); 
$results = current($allResults); 

$upper = $results[0]; 
$lower = $results[1]; 
$final = $results[2]; 

$all = array_merge($results[0], $results[1], $results[2]); 

$matchno = 2; 
$score1 = 3; 
$score2 = 5; 

if($matchno <= 15) 
{ 
    $bracket = $upper; 
} 
elseif($matchno >= 16 && $matchno <= 29) 
{ 
    $bracket = $lower; 
} 
elseif($matchno >= 30 && $matchno <= 32) 
{ 
    $bracket = $final; 
} 

foreach($bracket as $match => $result[0]) 
{ 
    foreach($result[0] as $match => $result) 
    { 
     $match += 1; 

     if($match == $matchno) 
     { 
      $result[0] = $score1; 
      $result[1] = $score2; 
     } 

     echo json_encode($result); 
    } 
} 


?> 
+1

不要創建自己的json。只需使用'json_encode()',因爲php會解析它。 – aldrin27

回答

0

此代碼存在一些問題。

在外部循環和內部循環中使用$ match。該變量將在內部循環中被覆蓋。

$ result用於循環外部,也用作兩個循環中的值。

foreach($bracket as $match => $result[0]) 
{ 
    foreach($result[0] as $match => $result) 
    { 
     $match += 1; 

     if($match == $matchno) 
     { 
      $result[0] = $score1; 
      $result[1] = $score2; 
     } 

     echo json_encode($result); 
    } 
} 

我沒有清楚地理解你想要的輸出,但做了一些猜測,請看看這是否做你想要的。

<?php 
$upper = 
[ 
[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], 
[[0,0],[0,0],[0,0],[0,0]], 
[[0,0],[0,0]], 
[[0,0]] 
]; 

$lower = 
[ 
[[0,0],[0,0],[0,0],[0,0]], 
[[0,0],[0,0],[0,0],[0,0]], 
[[0,0],[0,0]], 
[[0,0],[0,0]], 
[[0,0]], 
[[0,0]] 
]; 

$final = 
[ 
[[0,0],[0,0]], 
[[0,0]] 
]; 



$matchno = 2; 
$score1 = 3; 
$score2 = 5; 

if($matchno <= 15) 
{ 
    $description = "Upper"; 
    $bracket = $upper; 
    $offset = 0; 
} 
elseif($matchno >= 16 && $matchno <= 29) 
{ 
    $description = "Lower"; 
    $bracket = $lower; 
    $offset = 16; 
} 
elseif($matchno >= 30 && $matchno <= 32) 
{ 
    $description = "Final"; 
    $bracket = $final; 
    $offset = 30; 
} 

$matchNumberInBlock = 0; 
echo "$description\n"; 
foreach($bracket as $i => $round) 
{ 
    foreach($round as $j => $match) 
    { 
     $matchNumberInBlock++; 

     if ($matchNumberInBlock + $offset == $matchno) 
     { 
      $bracket[$i][$j][0] = $score1; 
      $bracket[$i][$j][1] = $score2; 
     } 

    } 
} 
echo json_encode($bracket); 
echo "\n"; 
+0

感謝這工作得很好!我只需要將$ matchNumberInBlock更改爲$ matchNumberInBlock = -1;爲低級和決賽。 –

+0

我看到問題了。你可能已經在if語句之後移動了$ matchNumberInBlock ++。 – ryantxr