Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2011, 12:57   #1
brulik67
Пользователь
 
Регистрация: 12.06.2011
Сообщений: 12
По умолчанию Вывод данных из массива

Народ подскажите пожалуйста как и что сделать

a. У нас есть массив новостей в ассоциированном массиве
PHP код:
$news = array(
=> array('id' => '1'
               
'title' => 'Динамика курсов валют. Сентябрь 2009',
               
'date' => '2009-09-30 00:00:00',
               
'descript' => 'Рубль по итогам валютных торгов на ММВБ в среду подорожал на 5 копеек к бивалютной корзине (0,55 доллара и 0,45 евро) и на 10 копеек к доллару на фоне возобновившегося ослабления американской валюты к евро на Forex.',
               
'image' => ''),
=> array('id' => '2',
               
'title' => 'Курс доллара с 1 октября снижен',
               
'date' => '2009-09-30 12:38:00',
               
'descript' => 'Курс доллара ЦБ с 1 октября установлен на уровне 30,0087 рубля, евро - 43,8877 рубля, свидетельствуют данные Банка России.',
               
'image' => ''),
=> array('id' => '5',
               
'title' => 'Доллар падает, рубль взлетает.',
               
'date' => '2009-09-30 14:32:00',
               
'descript' => 'Американская валюта переживает не лучшую неделю в своей долгой жизни…',
               
'image' => ''),

Вам необходимо вывести новости в нижеуказанном формате.
Пример выведенных новостей:

12.11.1987
Стартовал американский шаттл
Стартовал американский шаттл "Атлантис" (СТС-74) со стыковочным отсеком.

13.11.1987
Пристыковался американский шаттл
Пристыковался американский шаттл "Атлантис" (СТС-74) со стыковочным отсеком.

Если в тексте новости встречается число, Вам необходимо привести его к вещественному числу с двумя знаками после запятой (1234,07).



я осилил только это
PHP код:

$news 
= array(
    
=> array('id' => '1',
             
'title' => 'Динамика курсов валют. Сентябрь 2009'
             
'date' => '2009-09-30 00:00:00',
              
'descript' => 'Рубль по итогам валютных торгов на ММВБ в среду подорожал на 5 копеек к бивалютной корзине (0,55 доллара и 0,45 евро) и на 10 копеек к доллару на фоне возобновившегося ослабления американской валюты к евро на Forex.',
              
'image' => ''),
    
=> array(   'id' => '2',
              
'title' => 'Курс доллара с 1 октября снижен',
              
'date' => '2009-09-30 12:38:00',
              
'descript' => 'Курс доллара ЦБ с 1 октября установлен на уровне 30,0087 рубля, евро - 43,8877 рубля, свидетельствуют данные Банка России.',
              
'image' => ''),
    
=> array(  'id' => '5',
             
'title' => 'Доллар падает, рубль взлетает.',
             
'date' => '2009-09-30 14:32:00',
             
'descript' => 'Американская валюта переживает не лучшую неделю в своей долгой жизни…',
              
'image' => ''),
);

 
 
foreach(
$news as $new)    
{
    foreach (
$new as $value)
    {
    echo 
$value "<br>";    
    }
    

на выходе получил
1
Динамика курсов валют. Сентябрь 2009
2009-09-30 00:00:00
Рубль по итогам валютных торгов на ММВБ в среду подорожал на 5 копеек к бивалютной корзине (0,55 доллара и 0,45 евро) и на 10 копеек к доллару на фоне возобновившегося ослабления американской валюты к евро на Forex.

2
Курс доллара с 1 октября снижен
2009-09-30 12:38:00
Курс доллара ЦБ с 1 октября установлен на уровне 30,0087 рубля, евро - 43,8877 рубля, свидетельствуют данные Банка России.

5
Доллар падает, рубль взлетает.
2009-09-30 14:32:00
Американская валюта переживает не лучшую неделю в своей долгой жизни…

как сделать так как надо?

Последний раз редактировалось brulik67; 13.06.2011 в 14:36.
brulik67 вне форума Ответить с цитированием
Старый 13.06.2011, 13:36   #2
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
По умолчанию

Как-то так ?

PHP код:
$news = array (
    
0=>array (
        
'id'=>'1'
        
'title'=>'Динамика курсов валют. Сентябрь 2009'
        
'date'=>'2009-09-30 00:00:00'
        
'descript'=>'Рубль по итогам валютных торгов на ММВБ в среду подорожал на 5 копеек к бивалютной корзине (0,55 доллара и 0,45 евро) и на 10 копеек к доллару на фоне возобновившегося ослабления американской валюты к евро на Forex.'
        
'image'=>''), 
    
1=>array (
        
'id'=>'2'
        
'title'=>'Курс доллара с 1 октября снижен'
        
'date'=>'2009-09-30 12:38:00'
        
'descript'=>'Курс доллара ЦБ с 1 октября установлен на уровне 30,0087 рубля, евро - 43,8877 рубля, свидетельствуют данные Банка России.'
        
'image'=>''), 
    
2=>array (
        
'id'=>'5'
        
'title'=>'Доллар падает, рубль взлетает.'
        
'date'=>'2009-09-30 14:32:00'
        
'descript'=>'Американская валюта переживает не лучшую неделю в своей долгой жизни…'
        
'image'=>''));

$keys_to_output = array (
    
"title"
    
"descript");
date_default_timezone_set('Europe/Helsinki');
foreach (
$news as $new) {
    if (isset(
$new['date'])) {
        
$t date("d.m.Y"strtotime($new['date']));
        echo 
$t "<br/>";
    }
    foreach (
$keys_to_output as $key)
        if (isset(
$new[$key])) echo $new[$key] . "<br/>";
    echo 
"<br/>";

Насчёт чисел идите в тему соседнюю, есть там ответы, как сделать это. (Как найти число в строке? PHP) Оформите в функцию и в нужном месте примените.

PS: Оформляйте код как следует, если хотите, что бы вам помогали в дальнейшем.
graymaster вне форума Ответить с цитированием
Старый 13.06.2011, 14:59   #3
brulik67
Пользователь
 
Регистрация: 12.06.2011
Сообщений: 12
По умолчанию

если вам не сложно, то откоментируйте пожалуйста то что вы сделали, хочется понять что и как получилось
brulik67 вне форума Ответить с цитированием
Старый 13.06.2011, 15:33   #4
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
По умолчанию

PHP код:
<?
// Тут ввод данных в массив, он остался таким же, только немного отформатированным Зенд-ом
$news = array (
    
0=>array (
        
'id'=>'1'
        
'title'=>'Динамика курсов валют. Сентябрь 2009'
        
'date'=>'2009-09-30 00:00:00'
        
'descript'=>'Рубль по итогам валютных торгов на ММВБ в среду подорожал на 5 копеек к бивалютной корзине (0,55 доллара и 0,45 евро) и на 10 копеек к доллару на фоне возобновившегося ослабления американской валюты к евро на Forex.'
        
'image'=>''), 
    
1=>array (
        
'id'=>'2'
        
'title'=>'Курс доллара с 1 октября снижен'
        
'date'=>'2009-09-30 12:38:00'
        
'descript'=>'Курс доллара ЦБ с 1 октября установлен на уровне 30,0087 рубля, евро - 43,8877 рубля, свидетельствуют данные Банка России.'
        
'image'=>''), 
    
2=>array (
        
'id'=>'5'
        
'title'=>'Доллар падает, рубль взлетает.'
        
'date'=>'2009-09-30 14:32:00'
        
'descript'=>'Американская валюта переживает не лучшую неделю в своей долгой жизни…'
        
'image'=>''));
/*
 * Тут я задаю ключи, которые нужно вывести на экран из массива данных. Можно было
 * бы сделать проще, и вывесть их не циклом, а по отдельности, но вы выводили их
 * вложенными циклами, да и как задел на будущее, если этих ключей будет больше, добавить
 * дополнительные будет быстрее.
 */
     
$keys_to_output = array (
    
"title"
    
"descript");
// Это так, что бы убрать нотификэйшн про неустановленное локальное время. Если оно уже было
// установлено ранее, это нужно убрать, и, если оставляете, замените на своё, вряд ли вы
// пишите из Хельсинки.  
date_default_timezone_set('Europe/Helsinki');
// Перебираем новости
foreach ($news as $new) {
    
// Выводим дату, на всякий случай проверяем её наличие, т.к. данные вводятся из какого-то
    // неизвестного источника, и не дано, что дата там присутствует обязательно.
    
if (isset($new['date'])) {
        
// ти=форматированная дата из юниксТаймСтемп, отпарсенного из даты, данной в массиве. 
        
$t date("d.m.Y"strtotime($new['date']));
        echo 
$t "<br/>";
    }
    
// Для каждого из ключей, заданных на вывод - проверяем наличие и выводим. Сюда же нужно
    // будет добавить функцию, которая будет форматировать вещественные числа.
    
foreach ($keys_to_output as $key)
        if (isset(
$new[$key])) echo $new[$key] . "<br/>";
    
// Делаем пустую строку после каждой новости
    
echo "<br/>";
}
?>
graymaster вне форума Ответить с цитированием
Старый 13.06.2011, 17:32   #5
brulik67
Пользователь
 
Регистрация: 12.06.2011
Сообщений: 12
По умолчанию

что то как то не так получилось
PHP код:
$news = array(
    
=> array('id' => '1',
             
'title' => 'Динамика курсов валют. Сентябрь 2009'
             
'date' => '2009-09-30 00:00:00',
             
'descript' => 'Рубль по итогам валютных торгов на ММВБ в среду подорожал на 5 копеек к бивалютной корзине (0,55 доллара и 0,45 евро) и на 10 копеек к доллару на фоне возобновившегося ослабления американской валюты к евро на Forex.',
             
'image' => ''),
    
=> array('id' => '2',
             
'title' => 'Курс доллара с 1 октября снижен',
             
'date' => '2009-09-30 12:38:00',
             
'descript' => 'Курс доллара ЦБ с 1 октября установлен на уровне 30,0087 рубля, евро - 43,8877 рубля, свидетельствуют данные Банка России.',
             
'image' => ''),
    
=> array('id' => '5',
             
'title' => 'Доллар падает, рубль взлетает.',
             
'date' => '2009-09-30 14:32:00',
             
'descript' => 'Американская валюта переживает не лучшую неделю в своей долгой жизни…',
             
'image' => ''),
);

function 
round($des)

$c="\\1";$d="[0-9]";$e=",";
$a="~([0-9$e]+)| $e |$e($d+)$e| ($d+$e$d{2,2})($d+) | ($d+$e$d{1,1}) | ($d+)$e | ($d+) ~";
$a=explode("|",implode("~|~",explode("|",$a)));
$b=explode("|",$c |,|$e$c $e |$c|\\010|$c,|$c,");
$des=preg_replace($a,$b,$des);
}
 

$keys_to_output = array (
    
"title"
    
"descript");
date_default_timezone_set('Europe/Helsinki');
foreach (
$news as $new) {
    if (isset(
$new['date'])) {
        
$t date("d.m.Y"strtotime($new['date']));
        echo 
$t "<br/>";
    }
    foreach (
$keys_to_output as $key)
        
        
round($key);
        if (isset(
$new[$key]))
        echo 
$new[$key] . "<br/>";
    echo 
"<br/>";

и почему то после каждой цифры в тексте запятая появляется
brulik67 вне форума Ответить с цитированием
Старый 13.06.2011, 19:58   #6
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
По умолчанию

PHP код:
$news = array (
    
0=>array (
        
'id'=>'1'
        
'title'=>'Динамика курсов валют. Сентябрь 2009'
        
'date'=>'2009-09-30 00:00:00'
        
'descript'=>'Рубль по итогам валютных торгов на ММВБ в среду подорожал на 5 копеек к бивалютной корзине (0,55 доллара и 0,45 евро) и на 10 копеек к доллару на фоне возобновившегося ослабления американской валюты к евро на Forex.'
        
'image'=>''), 
    
1=>array (
        
'id'=>'2'
        
'title'=>'Курс доллара с 1 октября снижен'
        
'date'=>'2009-09-30 12:38:00'
        
'descript'=>'Курс доллара ЦБ с 1 октября установлен на уровне 30,0087 рубля, евро - 43,8877 рубля, свидетельствуют данные Банка России.'
        
'image'=>''), 
    
2=>array (
        
'id'=>'5'
        
'title'=>'Доллар падает, рубль взлетает.'
        
'date'=>'2009-09-30 14:32:00'
        
'descript'=>'Американская валюта переживает не лучшую неделю в своей долгой жизни…'
        
'image'=>''));

function 
find_n_round($des) {
    
$c "\\1";
    
$d "[0-9]";
    
$e ",";
    
$a "~([0-9$e]+)| $e |$e($d+)$e| ($d+$e$d{2,2})($d+) | ($d+$e$d{1,1}) | ($d+)$e | ($d+) ~";
    
$a explode("|"implode("~|~"explode("|"$a)));
    
$b explode("|"$c |,|$e$c $e |$c|\\010|$c,00|$c,00");
    
$des preg_replace($a$b$des);
    return 
$des;
}


$keys_to_output = array (
    
"title"
    
"descript");
date_default_timezone_set('Europe/Helsinki');
foreach (
$news as $new) {
    if (isset(
$new['date'])) {
        
$t date("d.m.Y"strtotime($new['date']));
        echo 
$t "<br/>";
    }
    foreach (
$keys_to_output as $key)
        
    if (isset(
$new[$key])) echo find_n_round($new[$key]) . "<br/>";
    echo 
"<br/>";

Что-то вы с функцией напутали, да. Функцию надо применять к значению (тексту) а не к ключу.

Вышеприведённый код работает так:

30.09.2009
Динамика курсов валют. Сентябрь 2009,00
Рубль по итогам валютных торгов на ММВБ в среду подорожал на 5,00 копеек к бивалютной корзине ( 0,55 доллара и 0,45 евро) и на 10,00 копеек к доллару на фоне возобновившегося ослабления американской валюты к евро на Forex.

30.09.2009
Курс доллара с 1,00 октября снижен
Курс доллара ЦБ с 1,00 октября установлен на уровне 30,00 рубля, евро - 43,88 рубля, свидетельствуют данные Банка России.

30.09.2009
Доллар падает, рубль взлетает.
Американская валюта переживает не лучшую неделю в своей долгой жизни…
graymaster вне форума Ответить с цитированием
Старый 13.06.2011, 20:01   #7
graymaster
Форумчанин
 
Аватар для graymaster
 
Регистрация: 03.05.2011
Сообщений: 158
По умолчанию

Цитата:
Если в тексте новости встречается число, Вам необходимо привести его к вещественному числу с двумя знаками после запятой (1234,07).
Сорри, очевидно, что надо приводить в двум знакам после запятой только дробные числа (хотя 1,00 октября - порадовало )
Да, и кстати, привести или округлить ? Округлить чуток посложнее будет...

Вот эту строчку надо поправить как-то
с
$b = explode("|", " $c |,|$e$c $e |$c|\\010|$c,00|$c,00");
на
$b = explode("|", " $c |,|$e$c $e |$c|\\010|$c|$c");

Тогда такой вот результат:

30.09.2009
Динамика курсов валют. Сентябрь 2009
Рубль по итогам валютных торгов на ММВБ в среду подорожал на 5 копеек к бивалютной корзине ( 0,55 доллара и 0,45 евро) и на 10 копеек к доллару на фоне возобновившегося ослабления американской валюты к евро на Forex.

30.09.2009
Курс доллара с 1 октября снижен
Курс доллара ЦБ с 1 октября установлен на уровне 30,00 рубля, евро - 43,88 рубля, свидетельствуют данные Банка России.

30.09.2009
Доллар падает, рубль взлетает.
Американская валюта переживает не лучшую неделю в своей долгой жизни…

PS: Хотя всё же жаль одну целую и ноль сотых октября.

Последний раз редактировалось graymaster; 13.06.2011 в 20:09.
graymaster вне форума Ответить с цитированием
Старый 14.06.2011, 08:08   #8
brulik67
Пользователь
 
Регистрация: 12.06.2011
Сообщений: 12
По умолчанию

да что то я вообще затупил, ведь всего то надо было что на выходе получаем через функцию прогнать))) да с 1,00 октября действительно улыбнуло
окончательный вид таков я полагаю
PHP код:
$news = array(
    
=> array('id' => '1',
             
'title' => 'Динамика курсов валют. Сентябрь 2009'
             
'date' => '2009-09-30 00:00:00',
             
'descript' => 'Рубль по итогам валютных торгов на ММВБ в среду подорожал на 5 копеек к бивалютной корзине (0,55 доллара и 0,45 евро) и на 10 копеек к доллару на фоне возобновившегося ослабления американской валюты к евро на Forex.',
             
'image' => ''),
    
=> array('id' => '2',
             
'title' => 'Курс доллара с 1 октября снижен',
             
'date' => '2009-09-30 12:38:00',
             
'descript' => 'Курс доллара ЦБ с 1 октября установлен на уровне 30,0087 рубля, евро - 43,8877 рубля, свидетельствуют данные Банка России.',
             
'image' => ''),
    
=> array('id' => '5',
             
'title' => 'Доллар падает, рубль взлетает.',
             
'date' => '2009-09-30 14:32:00',
             
'descript' => 'Американская валюта переживает не лучшую неделю в своей долгой жизни…',
             
'image' => ''),
);

function 
find_n_round($des) {
    
$c "\\1";
    
$d "[0-9]";
    
$e ",";
    
$a "~([0-9$e]+)| $e |$e($d+)$e| ($d+$e$d{2,2})($d+) | ($d+$e$d{1,1}) | ($d+)$e | ($d+) ~";
    
$a explode("|"implode("~|~"explode("|"$a)));
    
$b explode("|"$c |,|$e$c $e |$c|\\010|$c|$c");
    
$des preg_replace($a$b$des);
    return 
$des;
}


$keys_to_output = array (
    
"title"
    
"descript");
date_default_timezone_set('Europe/Helsinki');
foreach (
$news as $new) {
    if (isset(
$new['date'])) {
        
$t date("d.m.Y"strtotime($new['date']));
        echo 
$t "<br/>";
    }
    foreach (
$keys_to_output as $key)
        
    if (isset(
$new[$key])) echo find_n_round($new[$key]) . "<br/>";
    echo 
"<br/>";

brulik67 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод массива saix Общие вопросы C/C++ 3 26.03.2011 23:13
вывод массива DrSMERTb C++ Builder 6 23.02.2011 18:07
Как сделать вывод данных после всего ввода данных. Donatello Общие вопросы C/C++ 6 16.01.2011 16:32
Вывод данных из массива alekstav Общие вопросы Delphi 6 26.12.2010 09:38
вывод элементов из массива kirosin PHP 3 15.05.2010 13:00