2016-12-24 2 views
0

私のコードは次のようである:結果が期待どおりになるようにコードを編集するには?

<?php 

    function romanic_number($integer, $upcase = true) 
    { 
     $table = array('M'=>1000, 'CM'=>900, 'D'=>500, 'CD'=>400, 'C'=>100, 'XC'=>90, 'L'=>50, 'XL'=>40, 'X'=>10, 'IX'=>9, 'V'=>5, 'IV'=>4, 'I'=>1); 
     $return = ''; 
     while($integer > 0) 
     { 
      foreach($table as $rom=>$arb) 
      { 
       if($integer >= $arb) 
       { 
        $integer -= $arb; 
        $return .= $rom; 
        break; 
       } 
      } 
     } 

     return $return; 
    } 

    $testArray = array(
      array(
       'display' => '1', // strlen = 1 => it's Continent 
       'uraian' => 'European Continent', 
      ), 
      array(
       'display' => '114', // strlen = 3 => it's Country 
       'uraian' => 'England Country', 
      ), 
      array(
       'display' => '1141444', // strlen = 7 => it's City 
       'uraian' => 'London City', 
      ), 
      array(
       'display' => '1141445', 
       'uraian' => 'Manchester City', 
      ), 
      array(
       'display' => '1141452', 
       'uraian' => 'Liverpool City', 
      ), 
      array(
       'display' => '1141454', 
       'uraian' => 'Oxford City', 
      ), 
      array(
       'display' => '115', 
       'uraian' => 'Spain Country', 
      ), 
      array(
       'display' => '1151464', 
       'uraian' => 'Madrid City', 
      ), 
      array(
       'display' => '1151465', 
       'uraian' => 'Barcelona City', 
      ), 
      array(
       'display' => '2', 
       'uraian' => 'Asian Continent', 
      ), 
      array(
       'display' => '215', 
       'uraian' => 'Japan Country', 
      ), 
      array(
       'display' => '2151474', 
       'uraian' => 'Tokyo City', 
      ), 
      array(
       'display' => '2151475', 
       'uraian' => 'Osaka City', 
      ) 
     ); 

    echo '<table border=1> 
      <tr> 
       <th>No</th> 
       <th>Description</th> 
      </tr>'; 
    $i = 1; 
    $j = 'A'; 
    foreach($testArray as $key) 
    { 
     echo '<tr> 
       <td>'; 
        if(strlen($key['display'])==3) 
        { 
         echo romanic_number($i); 
         ++$i; 
        } 
        if(strlen($key['display'])==7) 
        { 
         echo $j; 
         ++$j; 
        } 
     echo '</td> 
       <td>'; 
        echo $key['uraian']; 
     echo '</td> 
      </tr>'; 
    } 
    echo '</table>'; 

?> 

結果はこのようなものです:http://postimg.org/image/9jmn7mlr1/

enter image description here

私はいないような結果をしたいが、このような:

https://postimg.org/image/579p02c1p/

enter image description here

私はコードを編集しようとしましたが、私はまだそれを行うことはできません。

私を助けることができる人はいますか?あなたがここに二つのことをしなければならない

+0

あなたのhtmlコードを構築する前に配列**は常に大陸/国/都市でソートされますか? – Sean

答えて

3

:あなたのforeachは1つの大陸の横断を完了すると

  • は両方$i$j変数をリセットします。
  • ループが国の各都市のトラバーサルを完了すると、変数$jをリセットします。

だからあなたforeachループは次のようにする必要があります:あなたはhtmlコードをビルドする前に、あなたの配列は常にContinent/Country/Cityによって適切にソートされ

foreach($testArray as $key){ 
    if(strlen($key['display'])==1){ 
     $i = 1; $j = 'A'; 
    } 
    echo '<tr><td>'; 
     if(strlen($key['display'])==3){ 
      echo romanic_number($i); 
      ++$i; 
      $j = 'A'; 
     } 
     if(strlen($key['display'])==7){ 
      echo $j; 
      ++$j; 
     } 
    echo '</td><td>'; 
     echo $key['uraian']; 
    echo '</td></tr>'; 
} 
1

場合は、あなただけリセットでき$i/$jカウンタは、あなたがContinent

if(strlen($key['display'])==1) {$i = 1;$j = 'A';} 

に来たときにちょうどの開始時に配置しますあなたのループ

... 
foreach($testArray as $key) 
{ 
     if(strlen($key['display'])==1) {$i = 1;$j = 'A';} 
... 
関連する問題