0

I have a function that returns an array like this:

[
"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"

]

And i need the result like next example: It's necessary in this format.

[
"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"
]

And my webservice PHP code is:

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);
}

How can I return json like the example that I show?

2
  • 1
    Having same keys in array is impossible Think of something else. Commented Jun 1, 2016 at 20:00
  • You can use a multidimensional array to have the same key name. So instead of all in one array you have one array with another array inside it with the keys you want. So one example would be: $arr[0]['waittime'] Commented Jun 1, 2016 at 20:12

1 Answer 1

1

Because associative arrays must have unique keys, you cannot have route, eta, or waittime appearing more than once in the output. But you can create a nested array that represents the data quite nicely.

$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);

Output (updated to show JSON)

[
    {
        "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"
    }
] 
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.