如何按顺序 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 .= " | " ;
}
我怎样才能让我的 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 .= " | " ;
}