2015-05-27 3 views
2

моя таблица базы данных содержит следующие данные
____________________________________
| name | start_date   | end_date           | класс             |
======================
| john       | 2015-01-01 | 2015-01-01   | срочно         |
| mary | 2015-01-12 | 2015-01-15   | важный |
| peter | 2015-01-19 | 2015-01-20   | важный |
| john   | 2015-01-26 | 2015-01-28     | важный |
=================================
как совместить одно и то же значение ключа в массиве

и это мой SQL-код в выборку данных

$sql=" 
SELECT `name`,`start_date`,`end_date`,`class`, 
     TIMESTAMPDIFF(DAY,start_date,end_date)+1 AS no_days 
    FROM `schedule`" 

$result=mysql_query($sql); 
    while($row=mysql_fetch_assoc($result)){ 
     $data[] = array(
      'label' => $row["name"], 
      'start' => $row["start_date"], 
      'no_days'=> $row["no_days"], 
      'class' => $row["class"], 
     ); 
    } 


class Gantti{ 
    var $data = array(); 
    var $blocks = array(); 
    var $block = array(); 
    // the rest of gantti class code is for table format so i didnt include it in here 
} 


function parse(){ 
    foreach($this->data as $d){ 
     $this->blocks[$d['label']][]=array(
      'label' => $d['label'], 
      'start'=>$start=($d['start']), 
      'no_days'=>$no_days=$d['no_days'], 
      'class'=>$d['class']); 
    } 
    } 
    var_dump($this->blocks); 

после я свалка $ this-> блок, он дал мне следующее расположение массива

array() 
    john=> 
     array() 
     0=> 
      array() 
      'label' => string 'john' 
      'start' => string '2015-01-01' 
      'no_days'=> string '1' 
      'class' => string 'urgent' 
     1=> 
      array() 
      'label' => string 'john' 
      'start' => string '2015-01-26' 
      'no_days'=> string '3' 
      'class' => string 'important' 
    mary=> 
     array() 
     0=> 
      array() 
      'label' => string 'mary' 
      'start' => string '2015-01-12' 
      'no_days'=> string '4' 
      'class' => string 'important' 
    peter=> 
     array() 
     0=> 
      array() 
      'label' => string 'peter' 
      'start' => string '2015-01-19' 
      'no_days'=> string '2' 
      'class' => string 'important' 

но мой выход предназначен, как это

array() 
    0=> 
     array() 
      'label' => string 'john' 
      'start' => 
       array() 
        0=> string '2015-01-01' 
        1=> string '2015-01-26' 
      'no_days' => 
       array() 
        0=> string '1' 
        1=> string '3' 
      'class' => 
       array() 
        0=> string 'urgent' 
        1=> string 'important' 
    1=> 
     array() 
      'label' => string 'mary' 
      'start' => 
       array() 
        0=> string '2015-01-12' 
      'no_days' => 
       array() 
        0=> string '4' 
      'class' => 
       array() 
        0=> string 'important' 
    2=> 
     array() 
      'label' => string 'peter' 
      'start' => 
       array() 
        0=> string '2015-01-19' 
      'no_days' => 
       array() 
        0=> string '2' 
      'class' => 
       array() 
        0=> string 'important' 

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

+0

И вы все еще используете функции MySQL, почему? Они даже устарели какое-то время, а это значит, что новый код не должен его использовать ... –

+0

@WadeShuler это длинная история .. но после того, как я получу ответ на этот вопрос, я перестану использовать mysql ..:) – LBMG

+0

Я бы сохранил «ярлыки» в качестве ключей и работал оттуда. Вы только усложняете ситуацию, если хотите использовать номер индекса, как вы указали в своем предполагаемом примере. Чтобы поддержать пример, который вы хотите, я думаю, вам нужно пройти через массив, как в строках, чтобы проверить наличие вхождений john, а затем добавить данные. Использовать john в качестве ключа сделает код проще. – Skjaar

ответ

1

Попробуйте изменить структуру массива путем изменения forloop

function parse() 
{ 
    foreach($this->data as $d) 
    { 
     $this->raw_blocks[$d['label']]['label'] = $d['label']; 
     $this->raw_blocks[$d['label']]['start'][] = $d['start']; 
     $this->raw_blocks[$d['label']]['no_days'][] = $d['no_days']; 
     $this->raw_blocks[$d['label']]['class'][] = $d['class']; 
    } 

    foreach($this->raw_blocks as $block) 
    { 
     $this->blocks[] = $block; 
    } 
} 
+1

спасибо за помощь .. код, который вы предоставили, дал мне выход, где john был исполнен 4 раза и mary 2 раза и peter один раз .. – LBMG

+0

Без проблем :) Зависит от ввода. Это вы предоставили? – sitilge

+0

Да, это то же самое, что и тот, который я предоставил ... – LBMG