動的

2016-06-01 41 views
0

私はこのような配列を返す関数があります。動的

[ 
"var0 => 300 PR. D. JOÃO", 
"var1 =>a passar", 
"var2 =>", 
"var3 => 904 Q.BELA VISTA", 
"var4 =>a passar", 
"var5 =>", 
"var6 => 905 MONTE VIRGEM", 
"var7 =>a passar", 
"var8 =>", 
"var9 => 300 TELHEIRA - C", 
"var10 =>a passar", 
"var11 =>", 
"var12 => 200 CAST. QUEIJO", 
"var13 =>20:39", 
"var14 =>5min" 

] 

を、私は次の例のような結果を必要とする: それはこの形式で必要なのです。

[ 
"route" => "300 PR. D. JOÃO", 
"eta" =>"a passar", 
"waittime" =>"", 
"route" => "904 Q.BELA VISTA", 
"eta" =>"a passar", 
"waittime" =>"", 
"route" =>" 905 MONTE VIRGEM", 
"eta" =>"a passar", 
"waittime" =>"", 
"route" =>" 300 TELHEIRA - C", 
"eta" =>"a passar", 
"waittime" =>"", 
"route" =>" 200 CAST. QUEIJO", 
"eta" =>"20:39", 
"waittime" =>"5min" 
] 

そして、私のWebサービスPHPコードは次のとおりです。

function getPage ($codigo) { 
    $link = "http://www.stcp.pt/pt//itinerarium/soapclient.php?codigo="; 
    $dom = new DOMDocument(); 
    $homepage = file_get_contents($link.$codigo); 
    $dom->loadHTML($homepage); 
    $tables = $dom->getElementsByTagName('table'); 
    $table = $tables->item(0); 
    $i = 0; 
    $var = array(); 
    foreach ($table->childNodes as $tr) { 
     if ($tr->nodeName == 'tr') { 
     foreach ($tr->childNodes as $td) { 
      $i++; 
      $tds= $td->nodeValue; 
      if ($i%2 == 0) { 
      } else { 
       array_push($var, $tds);     
      } 
     } 
     } else { 
     echo "string "; 
     } 
    } 
    $first = array_shift($var);    
    $second = array_shift($var);     
    $third = array_shift($var); 
    $maxvar = sizeof($var); 
    $final_array = array(); 
    for ($k=0; $k < sizeof($var); $k++) { 
     ${'var' . $k} = $var[$k]; 
     array_push($final_array, "var$k =>".$var[$k]); 
    } 
    echo json_encode($final_array); 
} 

は、どのように私は私が示す例のようにJSONを返すことができますか?

+1

は何か他のものと考えて__impossible__です。 –

+0

多次元配列を使用して同じキー名を使用できます。したがって、すべての配列の代わりに、配列内に別の配列があり、必要なキーがあります。だから一例があります: '$ arr [0] ['waittime']' – Andreas

答えて

1

連想配列には一意のキーが必要です。routeeta、またはwaittimeを複数回出力することはできません。しかし、データをきれいに表現する入れ子配列を作成することができます。配列のキーと同じキーを持つ(JSONを示すように更新)

$a = [ 
"var0 => 300 PR. D. JOÃO", 
"var1 =>a passar", 
"var2 =>", 
"var3 => 904 Q.BELA VISTA", 
"var4 =>a passar", 
"var5 =>", 
"var6 => 905 MONTE VIRGEM", 
"var7 =>a passar", 
"var8 =>", 
"var9 => 300 TELHEIRA - C", 
"var10 =>a passar", 
"var11 =>", 
"var12 => 200 CAST. QUEIJO", 
"var13 =>20:39", 
"var14 =>5min" 
]; 

function removeVarPrefix($x) { 
    return preg_replace('/^var\d+\s*=>\s*/', '', $x); 
} 

$b = array_map(function($set) { 
    list($route, $eta, $waittime) = array_map('removeVarPrefix', $set); 
    return ['route'=>$route, 'eta'=>$eta, 'waittime'=>$waittime]; 
}, array_chunk($a, 3)); 

echo json_encode($b, JSON_PRETTY_PRINT); 

出力

[ 
    { 
     "route": "300 PR. D. JO\u00c3O", 
     "eta": "a passar", 
     "waittime": "" 
    }, 
    { 
     "route": "904 Q.BELA VISTA", 
     "eta": "a passar", 
     "waittime": "" 
    }, 
    { 
     "route": "905 MONTE VIRGEM", 
     "eta": "a passar", 
     "waittime": "" 
    }, 
    { 
     "route": "300 TELHEIRA - C", 
     "eta": "a passar", 
     "waittime": "" 
    }, 
    { 
     "route": "200 CAST. QUEIJO", 
     "eta": "20:39", 
     "waittime": "5min" 
    } 
]