|
|
|
| Здравствуйте!
ломаю голову над такой задачей, есть двумерный массив:
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 | * | |
помогите пожалуйста решить эту задачу... | |
|
|
|
|
|
|
|
для: le_monstre
(09.02.2009 в 01:09)
| | Этот массив результат запроса к базе, и выборка идет только по одному месяцу? Как быть с Андреевой, у которой две записи за разные числа? | |
|
|
|
|
|
|
|
для: sim5
(09.02.2009 в 07:18)
| | да, это выборка из базы по одному месяцу или неделе месяца, у Андреевой две записи на два разных числа - это и есть проблема, которую я не могу никак решить :( | |
|
|
|
|
|
|
|
для: le_monstre
(09.02.2009 в 01:09)
| | Вот замечательная функция print_r() выдала Вам данные акуратно, в виде красивого такого деревца.
А Вы его зачем-то в одну строку растянули, в [code] уложили, и теперь пост ваш вытянут так, что на него ни взглянуть по-человечески, ни ответить. | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2009 в 10:20)
| | Trianon убрал из [code] , так лучше? | |
|
|
|
|
|
|
|
для: le_monstre
(09.02.2009 в 11:03)
| | конечно.
Хотя бы все кнопки/ссылки на странице видны.
Еще чуть чуть, и... :) | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2009 в 11:55)
| | Trianon :) | |
|
|
|
|
|
|
|
для: le_monstre
(09.02.2009 в 11:57)
| | Зря улыбаетесь.
Что имеено нужно брать из массива и класть в таблицу - из Ваего поста не понять никак. | |
|
|
|
|
 9 Кб |
|
|
для: Trianon
(09.02.2009 в 12:04)
| | таблица формируется по датам (они в шапке), соответствено даты только те, которые есть в массиве (26, 27, 30) и по фамилиям (левая часть таблицы). а в ячейках указывается занят человек или нет в ту или иную дату... прикрепляю картинку, может так будет лучше | |
|
|
|
|
|
|
|
для: le_monstre
(09.02.2009 в 12:17)
| | массив получен из запроса к БД?
Тогда лучше бы привести сам запрос и структуру таблицы.
В любом случае нужно знать, какое поле является ключом, однозначно определяющим этого самого человека,
и из какого поля брать дату (там их две) | |
|
|
|
|
|
|
|
для: 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 ключ) | |
|
|
|
|
|
|
|
для: 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 )
)
| ;
Ну а уж его в таблицу наверное особых сложностей не представит. | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2009 в 20:32)
| | об этом я думал вчера, даже на бумаге рисовал :) , а вот как этот массив создать, не доходит до моей головы :( | |
|
|
|
|
|
|
|
для: 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;
}
|
| |
|
|
|
|
|
|
|
для: Trianon
(09.02.2009 в 21:07)
| | Спасибо!!! побежал воять | |
|
|
|
|
|
|
|
для: 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 ) ) | |
|
|
|
|
|
|
|
для: le_monstre
(09.02.2009 в 22:32)
| | вообще-то я предлагал писать в совершенно независимый массив, изначально пустой.
Такого бардака там возникнуть не могло. | |
|
|
|
|
|
|
|
для: 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);
//
|
| |
|
|
|
|
|
|
|
для: le_monstre
(09.02.2009 в 23:09)
| | внимательно посмотреть на строку с array_pad и исправить ошибку.
=array_pad(array(), count($datrow), 0); | |
|
|
|
|
|
|
|
для: Trianon
(10.02.2009 в 00:33)
| | я не могу найти ошибку :(( такой я ламер....
вставил полностью Ваш вариант, эффект одинаков | |
|
|
|
|
|
|
|
для: le_monstre
(10.02.2009 в 00:55)
| | я же подсказал в предыдущем посте... | |
|
|
|
|
|
|
|
для: Trianon
(10.02.2009 в 01:01)
| | я просмотрел все, но не могу найти ее... уж прости | |
|
|
|
|
|
|
|
для: le_monstre
(10.02.2009 в 01:19)
| |
if(!isset($tab[$key])) $tab[$key] = array_pad(array(), count($datrow), 0);
|
| |
|
|
|
|
|
|
|
для: Trianon
(10.02.2009 в 01:50)
| | все.... вижу... такой я тупой | |
|
|
|
|
|
|
|
для: Trianon
(10.02.2009 в 01:50)
| | Спасибо!!! Вы самый лучший!!! | |
|
|
|