Moving foreach loop before return statement
I´m trying to place the result of a weather forecast function in a PHP return statement. To do this using concatenation I need to move a foreach loop up in the code and I just can´t get it to work.
I´m trying to create a function like this: :
function getWeatherForecast($atts) {
all variables go here;
return 'concatenated output';
}
Here a link to the full script: http://pastebin.com/fcQpskmy
This is what I have now:
function getWeatherForecast($atts) {
$xml = simplexml_load_file('http://www.google.com/ig/api?weather=barcelona');
$information = $xml->xpath("/xml_api_reply/weather/forecast_information");
$current = $xml->xpath("/xml_api_reply/weather/current_conditions");
$forecast_list = $xml->xpath("/xml_api_reply/weather/forecast_conditions");
/* The foreach loop should go here */
return '<h2>The weather today ' . $information[0]->city['data'] . '</h2>';
/* etc. etc. */
}
And this is the foreach loop that I need to place be开发者_运维百科fore the return statement:
<?php foreach ($forecast_list as $forecast) : ?>
<div>
<img src="<?php echo 'http://www.google.com' . $forecast->icon['data']?>" alt="weather"?>
<div><?php echo $forecast->day_of_week['data']; ?></div>
<span>
<?php echo $forecast->low['data'] ?>° F – <?php echo $forecast->high['data'] ?>° F,
<?php echo $forecast->condition['data'] ?>
</span>
</div>
<?php endforeach ?>
Thanks so much for your help!!
i tried this and it works:
<?
echo getWeatherForecast('');
function getWeatherForecast($atts) {
$xml = simplexml_load_file('http://www.google.com/ig/api?weather=barcelona');
$information = $xml->xpath("/xml_api_reply/weather/forecast_information");
$current = $xml->xpath("/xml_api_reply/weather/current_conditions");
$forecast_list = $xml->xpath("/xml_api_reply/weather/forecast_conditions");
foreach ($forecast_list as $forecast) {
?>
<div>
<img src="<?php echo 'http://www.google.com' . $forecast->icon['data']?>" alt="weather"?>
<div><?php echo $forecast->day_of_week['data']; ?></div>
<span>
<?php echo $forecast->low['data'] ?>° F – <?php echo $forecast->high['data'] ?>° F,
<?php echo $forecast->condition['data'] ?>
</span>
</div>
<? }
return '<h2>The weather today ' . $information[0]->city['data'] . '</h2>';
/* etc. etc. */
}
?>
but this is not right way to do that. Use one variable to accumulate html, and then return all the html. like this:
<?
echo getWeatherForecast('');
function getWeatherForecast($atts) {
$xml = simplexml_load_file('http://www.google.com/ig/api?weather=barcelona');
$information = $xml->xpath("/xml_api_reply/weather/forecast_information");
$current = $xml->xpath("/xml_api_reply/weather/current_conditions");
$forecast_list = $xml->xpath("/xml_api_reply/weather/forecast_conditions");
$html = '';
foreach ($forecast_list as $forecast) {
$html .= '<div>';
$html .= '<img src="http://www.google.com'.$forecast->icon['data'].'" alt="weather"/>';
$html .= '<div>'.$forecast->day_of_week['data'].'</div>';
$html .= '<span>';
$html .= $forecast->low['data'].'° F – '.$forecast->high['data'].'° F,'.$forecast->condition['data'];
$html .= '</span>';
$html .= '</div>';
}
$html .= '<h2>The weather today ' . $information[0]->city['data'] . '</h2>'
return $html;
/* etc. etc. */
}
?>
Just so we're clear, you want that foreach to be inside the function right?
In that case:
$html_code = "";
foreach ($forecast_list as $forecast) {
$html_code .='<div>
<img src="http://www.google.com' . $forecast->icon['data']. '" alt="weather" />
<div>'.$forecast->day_of_week['data'].'</div>
<span>
'. $forecast->low['data'] .'° F – '. $forecast->high['data'] .'° F,
'. $forecast->condition['data'] .'
</span>
</div>
}
And then $html_code will have all the html code needed to be concatenated on the return statement.
Is this what you need?
精彩评论