如何按顺序 return foreach 循环 - fb bot

How to return foreach loop in order - fb bot

我怎样才能让我的 foreach 循环 return routeTitle 和相关的分钟,而不是先有标题,再有分钟?

我的代码:

<?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";
    }
}

但是这 return 首先是所有的 routeTitles,然后是像这样分开的时间:

325-Don Mills arriving in 185-Don Mills Rocket arriving in 25-Don Mills arriving in Error this bus isn't running15 min |39 min |43 min |46 min |

我也尝试过将 $messagetitles 变量添加到 $messageminutes 中,如下所示:

 if($k == 'minutes'){
      $messageminutes .= $messagetitles.$v." min |";
 }

但这只适用于只有 1 条路线经过该巴士站的情况。

我将如何着手 return 每次在我的循环中使用它的每个分钟属性设置 routeTitle?

XML 供稿样本:XMLfeed

在一些帮助下,我能够认识到连接字符串是可行的方法,但我的变量需要重新排列。请参阅下面的正确顺序的成功输出:

foreach ($rt as $value) {
   $messagetitles = $value->attributes()->routeTitle ;
   $messageminutes = "" ;
   $final .= $messagetitles ;

    if(isset($value->direction)){
        $final .=" arriving in ";
        foreach($value->direction->prediction as $attr){


            foreach($attr->attributes() as $k => $v){
                if($k == 'minutes'){
                    $messageminutes .= " ".$v." min,";

                }
            }

        }
    }else{
        $messageminutes = " is currently not available.";
    }
    $final .= $messageminutes ;
    $final .= " | " ;
}