2012-02-10 1 views
2

фона:Возвращение массива типа не отображает содержимое в PHP

Создание веб-сайта, который отображает курсы валют разных стран по всему миру.

У меня есть функция, которая извлекает скорость и название валюты из документа 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 />'; 
} 

Если удалить обратный массив раскомментируйте эхо Нижеследующее функции работает, как ожидалось, но я Я пытаюсь улучшить этот метод, используя возвращаемый тип. Этот метод возвращает как скорость, так и заголовок, поэтому предположить, что возвращение массива является лучшим решением.

Я использую следующую функцию для выделения результатов из функций, перечисленных выше.

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

Я работаю над case 15 заявления выключателя на данный момент. 2 эхо-вызова в случае 15 показывают Array Array, что явно свидетельствует о том, что я не получаю доступ к переменной массива правильно.

Я пробовал заменить case 15 следующим, что, по моему мнению, было бы более синтаксически правильным, чтобы не было avial. Это также отображает 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?

+0

Почему вы вызываете get_rate() дважды в каждом случае? – vascowhite

+0

@vascowhite Да, это не имеет значения, называя их дважды. – keenProgrammer

ответ

1

При повторном вызове нестрокового, нечислового типа вы распечатываете только тип объекта. Это стандартное поведение на всех языках.

По существу, требуется создать строку из объекта, а для более сложных типов трудно понять, как вы превращаете их в строку, поэтому она просто выводит тип.

Чтобы получить поведение, которое вы хотите, вы вместо этого хотите повторить из строки в массиве, и поэтому ссылаться на них непосредственно, например, так:

$rate = get_rate($xml, $x); 
echo $rate[0] . ' '. $rate[1]; 

Кроме того, в качестве побочного самом деле, видеть все, что находится внутри объекта, вы также можете использовать:

var_dump( get_rate($xml, $x)); 

Это не будет отформатированы в симпатичном способе, но это позволит вам «заглянуть» объект.

0

Используйте var_dump(get_rate($xml,$x)); и посмотрите, поможет ли это вам выяснить, какие у вас есть переменные.

+0

'case 15: get_rate ($ xml, 15); // EUR 15 var_dump (get_rate ($ xml, $ x)); 'возвращает' array (2) {[0] => NULL [1] => NULL} ' – keenProgrammer

+0

Итак, вы получаете нулевые значения. Что такое '$ x'? Я не вижу, чтобы это было определено. –

+0

Правильно. '$ x' - это аргумент, который обрабатывается как' PHP_URL_Query'. например 'x = 15' Определяет позицию тега' 'в документе XML. '' http: //themoneyconverter.com/rss-feed/GBP/rss.xml? x = 15'' – keenProgrammer

Смежные вопросы