За последние 24 часа нас посетили 20229 программистов и 1724 робота. Сейчас ищут 2097 программистов ...

Вывод данных из массива

Тема в разделе "Сделайте за меня", создана пользователем maxzoni, 21 июл 2014.

  1. maxzoni

    maxzoni Новичок

    С нами с:
    21 июл 2014
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте! Прошу помощи. В гугл не отправлять - уже был ))). Для профи думаю это легко, но для меня как-то, туговато. Есть код, для парсинга курса валют.
    Код (Text):
    1. <?
    2. /************
    3. * getCourse()
    4. * Получение курса валют
    5. * $currency - массив с кодами валют
    6. * Возвращает массив со значениями курсов заданных валют
    7. * (ключ каждого элемента массива - название валюты на русском языке)
    8. * Коды валют можно найти здесь: http://www.cbr.ru/scripts/XML_val.asp?d=0
    9. * Например:
    10. * Доллар США - R01235
    11. * Евро - R01239
    12. * Фунт стерлингов - R01035
    13. *************/
    14. function getCourse($currency = array('R01235','R01239','R01810')){
    15.     $value = array();
    16.     $xml = DOMDocument::loadXML(file_get_contents('http://www.cbr.ru/scripts/XML_daily.asp'));
    17.     if($xml && is_array($currency)){
    18.         $xpc = new DOMXPath($xml);
    19.         foreach($currency as $cur){
    20.             $nominal = 1;
    21.             $name = '';
    22.             $res = $xpc->query('/ValCurs/Valute[@ID="'.$cur.'"]/Nominal/text()');
    23.             if($res->length) $nominal = floatval(str_replace(',','.',$res->item(0)->data));
    24.            
    25.             $res = $xpc->query('/ValCurs/Valute[@ID="'.$cur.'"]/Name/text()');
    26.             if($res->length) $name = $res->item(0)->data;
    27.            
    28.             $res = $xpc->query('/ValCurs/Valute[@ID="'.$cur.'"]/Value/text()');
    29.             if($res->length) $value[$name] = floatval(str_replace(',','.',$res->item(0)->data))/$nominal;
    30.             else $value[$name] = 'курс не найден';
    31.         }
    32.     }
    33.     return $value;
    34. }
    35. ?>
    36. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    37. <html xmlns="http://www.w3.org/1999/xhtml">
    38. <head>
    39. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    40. <title>Информер курса валют - pgood.ru</title>
    41. <style type="text/css">
    42. table{
    43. font:12px Arial, Helvetica, sans-serif;
    44. color:#333;
    45. }
    46. table td,th{
    47. padding:5px;
    48. text-align:left;
    49. }
    50. </style>
    51. </head>
    52.  
    53. <body>
    54. <table border="0" cellspacing="0" cellpadding="5">
    55.     <tr>
    56.         <th colspan="2">Курс валют на <?=date('d.m.Y')?></th>
    57.     </tr>
    58. <?
    59. $cur = getCourse();
    60. foreach($cur as $name => $value){
    61. ?>
    62.     <tr>
    63.         <th><?=$name?></th>
    64.         <td><?=number_format($value,4,',',' ')?> руб.</td>
    65.     </tr>
    66. <?
    67. }
    68. ?>
    69. </table>
    70. </body>
    71. </html>
    В итоге он выводит курсы валют в столбик все разом.
    А как мне, например, вывести курс одной валюты в одном месте (где мне надо), курс другой валюты в другом месте, а курс третьей - в третьем?
    Я так понимаю, что надо здесь что-то поменять:

    Код (Text):
    1. <?
    2. $cur = getCourse();
    3. foreach($cur as $name => $value){
    4. ?>
    5.     <tr>
    6.         <th><?=$name?></th>
    7.         <td><?=number_format($value,4,',',' ')?> руб.</td>
    8.     </tr>
    9. <?
    10. }
    11. ?>
    Если можно, то более подробно написать, что бы мне и себя и Вас не мучать вопросами )) А то с php я не очень дружу. Заранее спасибо!
     
  2. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Ваша переменная $cur имеет вид:
    Array ( [Доллар США] => 35.1627 [Евро] => 47.5505 [Южноафриканских рэндов] => 3.28752 )
    Безобразно, конечно, но жить можно.
    Так что там, где вам надо вывести курс доллара, пишите $cur['Доллар США'], где курс евро - $cur['Евро'].
    Хотя по-хорошему надо бы функцию переделать, чтобы ключом была не строка с кириллицей, а хотя бы те же самые коды типа R01235, иначе можете с кодировкой намаяться. Но попробуйте пока так.
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    Для начала тебе надо понимать в каком виде данные хранятся. Сделай
    Код (PHP):
    1. $cur = getCourse();
    2. echo '<pre>'.var_export($cur, true).'</pre>';
    дальше сам как-нибудь… Хыиду опередил и всё хорошо расписал)))
     
  4. maxzoni

    maxzoni Новичок

    С нами с:
    21 июл 2014
    Сообщения:
    3
    Симпатии:
    0
    Что- то не получается......
    Вот, что выводит исходный код

    [​IMG]

    Если я правильно понял, то $cur['Доллар США'] надо вставить вот сюда?
    Код (Text):
    1. <?
    2. $cur['Доллар США'] = getCourse();
    3. foreach($cur as $name => $value){
    4. ?>
    5.    <tr>
    6.       <th><?=$name?></th>
    7.       <td><?=number_format($value,4,',',' ')?> руб.</td>
    8.    </tr>
    9. <?
    10. }
    11. ?>
    Если так, то получается вот так....

    [​IMG]


    видимо, что то я не так делаю.....
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.114
    Симпатии:
    1.244
    Адрес:
    там-сям
    не туда вставил. (гусары, молчать!)
    $cur = getCourse(); это получение данных. оставь его как есть
    тебе надо менять вывод, а не получение. то есть ПОСЛЕ получения, в своей таблице делаешь что-то типа <?= $cur['Доллар США'] ?>
     
  6. maxzoni

    maxzoni Новичок

    С нами с:
    21 июл 2014
    Сообщения:
    3
    Симпатии:
    0
    Все, разобрался!!! ))) Огромное спасибо Вам за помощь!!!!