背景:
创建一个显示世界各国汇率的网站。
我有一个从XML文档中检索汇率和货币标题的函数:
function get_rate(SimpleXMLElement $xml, $x) {
$currency['rate'] = $xml->channel->item[$x]->description;
preg_match('/([0-9]+'.[0-9]+)/', $currency['rate'], $matches);
$rate = $matches[0];
$title['rate'] = $xml->channel->item[$x]->title;
$title = explode('/', $title['rate']);
$title = $title[0];
return array(
$currency[0],
$title[1]
);
// echo $rate . ' ' . $title . '<br />';
}
如果我删除了返回数组,则函数下面的echo语句将按预期进行取消注释,但我正试图通过使用返回类型来改进此方法。此方法同时返回速率及其标题,因此假定返回数组是最佳解决方案。
我使用下面的函数来回显上面列出的函数的结果。
function get_currency_rate($feed) {
$xml = new SimpleXmlElement(file_get_contents($feed));
$rate = get_date($xml);
echo $rate['date'] . '<br />';
$vars = parse_url($feed, PHP_URL_QUERY);
parse_str($vars);
switch ($x) {
case 15:
get_rate($xml, 15); //EUR 15
echo get_rate($xml, $x);
get_rate($xml, 56); //USD 56
echo get_rate($xml, $x);
break;
case 16:
get_rate($xml, 16); //GBP 16
get_rate($xml, 15); //EUR 15
break;
case 56: default :
get_rate($xml, 15); // EUR 15
get_rate($xml, 56); // USD 56
break;
}
}
我现在正在处理switch语句的case 15
。情况15中的2个echo调用显示Array Array
,这清楚地表明我没有正确访问数组变量。
我试着用以下内容替换case 15
,我认为这在语法上更正确。这也像上面一样显示Array Array
。
case 15:
get_rate($xml, 15); //EUR 15
echo get_rate($xml, $currency[0]);
get_rate($xml, 56); //USD 56
echo get_rate($xml, $title[1]);
break;
问题是因为我在get_rate
函数中声明了不同的变量名吗?
当您回显非字符串、非数字类型时,您将只打印出对象类型。这是所有语言的标准行为。
它本质上是要求从对象中创建一个字符串,对于更复杂的类型,很难弄清楚如何将它们转换为字符串,所以它只输出类型。
为了获得所需的行为,您将需要回显数组中的字符串,并直接引用它们,如:
$rate = get_rate($xml, $x);
echo $rate[0] . ' '. $rate[1];
此外,作为一个附带的事实,要查看对象内部的所有内容,您还可以使用:
var_dump( get_rate($xml, $x));
这不会以最漂亮的方式格式化,但它将允许您"查看"对象。
使用var_dump(get_rate($xml,$x));
,看看这是否有助于找出您拥有的变量。