Как я могу получить, чтобы мой цикл foreach возвращал routeTitle и связанные минуты одновременно, а не заголовок сначала и минуты после?Как вернуть цикл foreach в порядке - fb bot
Мой код:
<?php
// parameters
$hubVerifyToken = '#######';
$accessToken = "########";
// check token at setup
if ($_REQUEST['hub_verify_token'] === $hubVerifyToken) {
echo $_REQUEST['hub_challenge'];
exit;
}
// handle bot's anwser
$input = json_decode(file_get_contents('php://input'), true);
$senderId = $input['entry'][0]['messaging'][0]['sender']['id'];
$messageText = $input['entry'][0]['messaging'][0]['message']['text'];
**$stopid = $messageText;
$urlbase = "http://webservices.nextbus.com/service/publicXMLFeed?command=predictions&a=ttc&stopId=";
$url = $urlbase.$stopid;
$xml = simplexml_load_file($url);
$rt = $xml->predictions;
foreach ($rt as $value) {
$messagetitles .= $value->attributes()->routeTitle." arriving in ";
if(isset($value->direction)){
foreach($value->direction->prediction as $attr){
foreach($attr->attributes() as $k => $v){
if($k == 'minutes'){
$messageminutes .= $v." min |";
}
}
}
}else{
$messageminutes = "Error this bus isn't running";
}
}
if($messageText == "hi") {
$answer = "Type your Stop ID for the latest times.";
}
$response = [
'recipient' => [ 'id' => $senderId ],
'message' => [ 'text' => $messagetitles.$messageminutes]
];**
$ch = curl_init('https://graph.facebook.com/v2.6/me/messages?access_token='.$accessToken);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($response));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_exec($ch);
curl_close($ch);
Я попытался: конкатенации строк
foreach ($rt as $value) {
$messagetitles .= $value->attributes()->routeTitle." arriving in ";
if(isset($value->direction)){
foreach($value->direction->prediction as $attr){
foreach($attr->attributes() as $k => $v){
if($k == 'minutes'){
$messageminutes .= $v." min |";
}
}
}
}else{
$messageminutes = "Error this bus isn't running";
}
}
но это возвращает все routeTitles первый, а затем раз в отдельности, как это:
325-Дон Миллс прибывает в 185-Дон Миллс Ракетка прибывает в 25-Дон Миллс прибывает в Ошибка, что этот автобус не работает15 мин | 39 мин | 43 мили n | 46 мин |
Я также попытался добавить $ messagetitles переменным в $ messageminutes так:
if($k == 'minutes'){
$messageminutes .= $messagetitles.$v." min |";
}
, но это работает только, если есть только один маршрут через эту автобусную остановку.
Как я могу каждый раз возвращать routeTitle с каждым из своих атрибутов минут в моем цикле?
XML FEED SAMPLE: XMLfeed
Это может быть полезно, чтобы увидеть образец XML вы обрабатываете – RiggsFolly
@RiggsFolly добавлен образец. – Zedkay22