Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вывод из массива
 
 автор: le_monstre   (09.02.2009 в 01:09)   письмо автору
 
 

Здравствуйте!

ломаю голову над такой задачей, есть двумерный массив:
Array ( [0] => Array ( [0] => 6 [1] => 2009-01-26 [2] => 2009-01-26 [3] => 10:00:00 [4] => 13:00:00 [5] => 5 [6] => 5 [7] => 4 [8] => 1 [9] => 2 [10] => 2 [11] => Andreeva [12] => 3 [13] => [14] => 1 ) [1] => Array ( [0] => 3 [1] => 2009-01-27 [2] => 2009-01-27 [3] => 10:00:00 [4] => 13:00:00 [5] => 5 [6] => 8 [7] => 4 [8] => 1 [9] => 2 [10] => 2 [11] => Andreeva [12] => 3 [13] => [14] => 1 ) [2] => Array ( [0] => 7 [1] => 2009-01-30 [2] => 2009-01-30 [3] => 14:00:00 [4] => 14:00:00 [5] => 1 [6] => 1 [7] => 4 [8] => 0 [9] => 1 [10] => 1 [11] => Makeeva [12] => 2 [13] => [14] => 1 ) [3] => Array ( [0] => 9 [1] => 2009-01-26 [2] => 2009-01-26 [3] => 12:00:00 [4] => 12:00:00 [5] => 6 [6] => 6 [7] => 4 [8] => 0 [9] => 3 [10] => 1 [11] => Panin [12] => 1 [13] => 256 [14] => 1 ) )

необходимо создать таблицу вида:

Январь 2009 |2009-01-26|2009-01-27|2009-01-30
Andreeva | * | * |
Makeeva | | | *
Panin | * | |

помогите пожалуйста решить эту задачу...

  Ответить  
 
 автор: sim5   (09.02.2009 в 07:18)   письмо автору
 
   для: le_monstre   (09.02.2009 в 01:09)
 

Этот массив результат запроса к базе, и выборка идет только по одному месяцу? Как быть с Андреевой, у которой две записи за разные числа?

  Ответить  
 
 автор: le_monstre   (09.02.2009 в 11:00)   письмо автору
 
   для: sim5   (09.02.2009 в 07:18)
 

да, это выборка из базы по одному месяцу или неделе месяца, у Андреевой две записи на два разных числа - это и есть проблема, которую я не могу никак решить :(

  Ответить  
 
 автор: Trianon   (09.02.2009 в 10:20)   письмо автору
 
   для: le_monstre   (09.02.2009 в 01:09)
 

Вот замечательная функция print_r() выдала Вам данные акуратно, в виде красивого такого деревца.
А Вы его зачем-то в одну строку растянули, в [code] уложили, и теперь пост ваш вытянут так, что на него ни взглянуть по-человечески, ни ответить.

  Ответить  
 
 автор: le_monstre   (09.02.2009 в 11:03)   письмо автору
 
   для: Trianon   (09.02.2009 в 10:20)
 

Trianon убрал из [code] , так лучше?

  Ответить  
 
 автор: Trianon   (09.02.2009 в 11:55)   письмо автору
 
   для: le_monstre   (09.02.2009 в 11:03)
 

конечно.
Хотя бы все кнопки/ссылки на странице видны.
Еще чуть чуть, и... :)

  Ответить  
 
 автор: le_monstre   (09.02.2009 в 11:57)   письмо автору
 
   для: Trianon   (09.02.2009 в 11:55)
 

Trianon :)

  Ответить  
 
 автор: Trianon   (09.02.2009 в 12:04)   письмо автору
 
   для: le_monstre   (09.02.2009 в 11:57)
 

Зря улыбаетесь.
Что имеено нужно брать из массива и класть в таблицу - из Ваего поста не понять никак.

  Ответить  
 
 автор: le_monstre   (09.02.2009 в 12:17)   письмо автору
9 Кб
 
   для: Trianon   (09.02.2009 в 12:04)
 

таблица формируется по датам (они в шапке), соответствено даты только те, которые есть в массиве (26, 27, 30) и по фамилиям (левая часть таблицы). а в ячейках указывается занят человек или нет в ту или иную дату... прикрепляю картинку, может так будет лучше

  Ответить  
 
 автор: Trianon   (09.02.2009 в 12:23)   письмо автору
 
   для: le_monstre   (09.02.2009 в 12:17)
 

массив получен из запроса к БД?
Тогда лучше бы привести сам запрос и структуру таблицы.

В любом случае нужно знать, какое поле является ключом, однозначно определяющим этого самого человека,
и из какого поля брать дату (там их две)

  Ответить  
 
 автор: le_monstre   (09.02.2009 в 19:47)   письмо автору
 
   для: Trianon   (09.02.2009 в 12:23)
 

Доброе время суток!

первоначально я делал запрос вида:
$result = mysql_query("SELECT id, start_date, end_date, client FROM ".$prefix."_services WHERE start_date >= '".$dstart."' and end_date <= "'.$dend."' ORDER BY start_date");
while (list(...)) = mysql_fetch_row($result) {
.....
}


потом переделал на такой:
          
$result = mysql_query("SELECT * FROM ".$prefix."_services WHERE start_date >= '".$dstart."' and end_date <= '".$dend."' ORDER BY client");

            // базу в массив
            $arr = array();
            while( $arr[] = mysql_fetch_row($result) ); 
            array_pop( $arr );


структура таблицы:


CREATE TABLE `{pref}_services` (
  `id` int(11) NOT NULL auto_increment,
  `start_date` date default NULL,
  `end_date` date default NULL,
  `start_time` time NOT NULL,
  `end_time` time NOT NULL,
  `agvid` int(11) NOT NULL,
  `agtid` int(11) NOT NULL,
  `vid` int(11) NOT NULL,
  `gid` int(11) NOT NULL,
  `hid` int(11) NOT NULL,
  `sid` int(11) NOT NULL,
  `client` varchar(50) default NULL,
  `chel` int(11) NOT NULL,
  `description` text NOT NULL ,
  `act` int(2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM;


дату брать start_date (в массиве [1] => ...), а фамилия человека client (11 ключ)

  Ответить  
 
 автор: Trianon   (09.02.2009 в 20:32)   письмо автору
 
   для: le_monstre   (09.02.2009 в 19:47)
 

проще всего в цикле разбора ответа сервера создать массив примерно такой:
array( 
 'Andreeva' => array(0,0,0,... 0,1,1,0,0,0,0 ),
 'Makeeva'  => array(0,0,0,... 0,0,0,0,0,1,0 ),
 'Panin'    => array(0,0,0,... 0,1,0,0,0,0,0 )
)
;
Ну а уж его в таблицу наверное особых сложностей не представит.

  Ответить  
 
 автор: le_monstre   (09.02.2009 в 20:36)   письмо автору
 
   для: Trianon   (09.02.2009 в 20:32)
 

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

  Ответить  
 
 автор: Trianon   (09.02.2009 в 21:07)   письмо автору
 
   для: le_monstre   (09.02.2009 в 20:36)
 

Грубыми такими штрихами - примерно так.
$tab = array();
for(..)
{
  $key = $row['client'];
  if(!isset($tab[$key])) $tab[$key]) = array_pad($tab, 31, 0);

  for($date = $row['start_date']; $date <= $row['end_date']; $date = nextdate($date))
          $tab[$key][days($date, $start_period)] = 1;
}

  Ответить  
 
 автор: le_monstre   (09.02.2009 в 21:09)   письмо автору
 
   для: Trianon   (09.02.2009 в 21:07)
 

Спасибо!!! побежал воять

  Ответить  
 
 автор: le_monstre   (09.02.2009 в 22:32)   письмо автору
 
   для: Trianon   (09.02.2009 в 21:07)
 

вроде бы почти получилось, только в массив пишется:

Array (
[Andreeva] => Array ( [0] => 1 [1] => 1 [2] => 0 )
[Makeeva] => Array ( [Andreeva] => Array ( [0] => 1 [1] => 1 [2] => 0 ) [0] => 0 [1] => 0 [2] => 1 )
[Panin] => Array ( [Andreeva] => Array ( [0] => 1 [1] => 1 [2] => 0 ) [Makeeva] => Array ( [Andreeva] => Array ( [0] => 1 [1] => 1 [2] => 0 ) [0] => 0 [1] => 0 [2] => 1 ) [0] => 1 ) )

как его вычистить? чтобы было так:

Array (
[Andreeva] => Array ( [0] => 1 [1] => 1 [2] => 0 )
[Makeeva] => Array ( [0] => 0 [1] => 0 [2] => 1 )
[Panin] => Array ( [0] => 1 ) )

  Ответить  
 
 автор: Trianon   (09.02.2009 в 23:06)   письмо автору
 
   для: le_monstre   (09.02.2009 в 22:32)
 

вообще-то я предлагал писать в совершенно независимый массив, изначально пустой.
Такого бардака там возникнуть не могло.

  Ответить  
 
 автор: le_monstre   (09.02.2009 в 23:09)   письмо автору
 
   для: Trianon   (09.02.2009 в 23:06)
 

так я и писал в пустой

вот кусок кода:
          $result = mysql_query("SELECT start_date, client FROM ".$prefix."_services WHERE start_date >= '".$dstart."' and end_date <= '".$dend."' ORDER BY client");
        //
        $tab = array();
          while (list($start_date, $client) = mysql_fetch_row($result)) {
           $key = $client;
              if(!isset($tab[$key])) $tab[$key] = array_pad($tab, count($datrow), 0);

              for( $i = 0; $i < count($datrow); $i++ ) {
                  if ($start_date == $datrow[$i]) $tab[$key][$i] = 1;
              }
          }
       print_r($tab);
       //

  Ответить  
 
 автор: Trianon   (10.02.2009 в 00:33)   письмо автору
 
   для: le_monstre   (09.02.2009 в 23:09)
 

внимательно посмотреть на строку с array_pad и исправить ошибку.
=array_pad(array(), count($datrow), 0);

  Ответить  
 
 автор: le_monstre   (10.02.2009 в 00:55)   письмо автору
 
   для: Trianon   (10.02.2009 в 00:33)
 

я не могу найти ошибку :(( такой я ламер....
вставил полностью Ваш вариант, эффект одинаков

  Ответить  
 
 автор: Trianon   (10.02.2009 в 01:01)   письмо автору
 
   для: le_monstre   (10.02.2009 в 00:55)
 

я же подсказал в предыдущем посте...

  Ответить  
 
 автор: le_monstre   (10.02.2009 в 01:19)   письмо автору
 
   для: Trianon   (10.02.2009 в 01:01)
 

я просмотрел все, но не могу найти ее... уж прости

  Ответить  
 
 автор: Trianon   (10.02.2009 в 01:50)   письмо автору
 
   для: le_monstre   (10.02.2009 в 01:19)
 

if(!isset($tab[$key])) $tab[$key] = array_pad(array(), count($datrow), 0);

  Ответить  
 
 автор: le_monstre   (10.02.2009 в 02:08)   письмо автору
 
   для: Trianon   (10.02.2009 в 01:50)
 

все.... вижу... такой я тупой

  Ответить  
 
 автор: le_monstre   (10.02.2009 в 02:30)   письмо автору
 
   для: Trianon   (10.02.2009 в 01:50)
 

Спасибо!!! Вы самый лучший!!!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования