2017-10-12 42 views
0

我需要使陣列更好。 我正在從數據庫獲取數據,我有里程碑和milestone_parts。我想要二維數組。我需要第一個維度中的里程碑數據和第二個維度中的里程碑部分數據。PHP - 陣列不會變成二維陣列

有了這個代碼:

$query = " 
     SELECT 
     a.id AS `milestone_id`, 
     a.titel AS `milestone_titel`, 
     a.client AS `client`, 
     a.verkocht_id AS `milestone_verkocht_id`, 

     b.id AS `milestonefase_id`, 
     b.titel AS `milestonefase_titel`, 
     b.milestone_id AS `milestonefase_milestone_id`, 
     b.omschrijving AS `milestonefase_omschrijving` 
     FROM `milestones` a 
     INNER JOIN `milestone_parts` b ON a.id=b.milestone_id 
     WHERE a.verkocht_id = '99' 
     "; 

     $result= $db->query($dbh, $query); 


      while ($row = $db->fetchassoc($result)) 
      { 
       $stone = array($row['milestone_verkocht_id'], $row['milestone_id'], $row['milestone_titel'], $row['client']); 
       $fase = array($row['milestonefase_milestone_id'],$row['milestonefase_id'],$row['milestonefase_titel']); 
       $stone[] = $fase; 
       echo '<pre>'; print_r($stone); echo '</pre>'; 
      } 

我得到這個作爲結果

Array 
(
    [0] => 99 
    [1] => 6 
    [2] => string 
    [3] => string 
    [4] => Array 
     (
      [0] => 6 
      [1] => 10 
      [2] => string 
     ) 

) 

Array 
(
    [0] => 99 
    [1] => 6 
    [2] => string 
    [3] => string 
    [4] => Array 
     (
      [0] => 6 
      [1] => 11 
      [2] => string 
     ) 

) 

但我需要(用名)這樣的:

Array 
(
    [milestone_verkocht_id] => 99 // This is project id 
    [milestone_id] => 6 
    [milestone_title] => string 
    [client] => string 
    [10] => Array 
     (
      [milestonefase_milestone_id] => 6 
      [milestonefase_id] => 10 
      [milestone_title] => string 
     ) 
    [11] => Array 
     (
      [milestonefase_milestone_id] => 6 
      [milestonefase_id] => 11 
      [milestone_title] => string 
     ) 
    [12] => Array 
     (
      [milestonefase_milestone_id] => 6 
      [milestonefase_id] => 12 
      [milestone_title] => string 
     ) 

) 

你能幫我還是你有一個解決方案?請幫幫我!

+1

獲取項目的ID,當前數組的項目組,根據此ID。 –

+0

請問你能更具體嗎? – Haffoo

回答

0

可以循環查詢返回的每個字段,檢查字段名,使新的陣列

$stones = array(); 
while ($row = $db->fetchassoc($result)) { 
    $fase = array(); 
    $stone = array('milestones' => array()); 
    foreach ($row as $k => $v) { 
     if (strpos($k, 'milestonefase_') === 0) { 
      $fase[$k] = $v; 
     } else { 
      $stone[$k] = $v; 
     } 
    } 
    if(!isset($stones[$stone['milestone_id']])) { 
     $stones[$stone['milestone_id']] = $stone; 
    } 
    $stones[$stone['milestone_id']]['milestones'][$fase['milestonefase_id']] = $fase; 
} 
echo '<pre>'.print_r($stones, true).'</pre>'; 

編輯 爲了匹配的要求而作出一些改變。現在我們使用$ stones來存儲我們已經擁有的里程碑信息,並在查詢中添加不同的「$ fase」 可能更清晰的方法是使用兩個不同的查詢獲取所有信息,一個用於里程碑和其他的fases

EDIT2 添加了一分陣列里程碑fases

+0

先生,這是行不通的: '$ fase = [];' '$ stone = [];' – Haffoo

+0

如果您正在運行一箇舊的PHP版本,您只需要將「[]」替換爲「數組()「 –

+0

我chnaged'$ fase = [];'到'$ fase = array();'但它沒有改變結果。 – Haffoo