2017-10-12 86 views
0

我在實習,我正在開發一個具有里程碑和里程碑部分的HTML表格(在這個項目中我們稱之爲milestonefase)。每個里程碑都有一堆里程碑事件。PHP-多維數組不會循環槽陣列

舉例: Milestone99有milestonefase 10,milestonefase14。

這些數據來自兩個不同的數據庫表。 我的數組是這樣的:

Array 
(
    [milestonesfases] => Array 
     (
      [10] => Array 
       (
        [milestonefase_id] => int 
        [milestonefase_titel] => string 
        [milestonefase_milestone_id] => int 
       ) 
      [14] => Array 
       (
        [milestonefase_id] => int 
        [milestonefase_titel] => string 
        [milestonefase_milestone_id] => int 
       ) 
     ) 

    [milestone_id] => int 
    [milestone_titel] => string 
    [client] => string 
    [milestone_verkocht_id] => int 
) 

我的問題是:如何在循環低谷與里程碑6(在這種情況下)

我環路連接所有milestonefases看起來是這樣的:

foreach ($stones as $milestone) 
{ 
    echo '<tr id="'. $milestone['milestone_id'] . '" class="milestone'. $milestone['milestone_id'] . '">'; 
    echo '<td>'. $milestone['milestone_id'] . '</td>'; 
    echo '<td><a href="javascript:keuzeGebruiker(\'milestone'.$milestone['milestone_id']. '\',\''.$milestone['milestone_id'].'\');">' . $milestone['milestone_titel'] . '</a></td>'; 
    echo '<td>'. $milestone['client'] . '</td>'; 
    echo '</tr>'; 

    for ($i = 0; $i < count($milestone['milestonesfases']); $i++) 
    { 
     echo '<tr>'; 
     echo '<td>'. $milestone['milestonesfases']['milestonefase_id'] . '</td>'; 
     echo '<td>'. $milestone['milestonesfases'][10]['milestonefase_titel'] . '</td>'; 
     echo '<td></td>'; 
     echo '</tr>'; 
    } 
} 

我的循環中的'10'需要是所有milestonefase_id(這是里程碑中的10,11,12,13,14,15)。

我該如何設法獲得所有里程碑事件。

注意!它必須爲每一個里程碑工作不僅於此 請

那一塊里程碑作品,但milestonefases不起作用。

你能幫助我還是你有解決方案?請幫幫我。

回答

1

而不是使用一個for循環,

for ($i = 0; $i < count($milestone['milestonesfases']); $i++) 

做一個foreach循環

foreach ($milestone['milestonesfases'] as $milestonesfase) 
{ 
    echo '<tr>'; 
    echo '<td>'. $milestonesfase['milestonefase_id'] . '</td>'; 
    echo '<td>'. $milestonesfase['milestonefase_titel'] . '</td>'; 
    echo '<td></td>'; 
    echo '</tr>'; 
} 
+0

謝謝先生,這工作! – Haffoo

0

請儘量

foreach ($stones as $milestone) 
{ 
echo '<tr id="'. $milestone['milestone_id'] . '" class="milestone'. $milestone['milestone_id'] . '">'; 
echo '<td>'. $milestone['milestone_id'] . '</td>'; 
echo '<td><a href="javascript:keuzeGebruiker(\'milestone'.$milestone['milestone_id']. '\',\''.$milestone['milestone_id'].'\');">' . $milestone['milestone_titel'] . '</a></td>'; 
echo '<td>'. $milestone['client'] . '</td>'; 
echo '</tr>'; 

foreach($milestone['milestonesfases'] as $milestoneRow) 
{ 
    if($milestoneRow['milestonefase_milestone_id'] == $milestone['milestone_id']) { 
     echo '<tr>'; 
     echo '<td>'. $milestoneRow['milestonefase_id'] . '</td>'; 
     echo '<td>'. $milestoneRow['milestonefase_titel'] . '</td>'; 
     echo '<td></td>'; 
     echo '</tr>'; 
    } 
} 
} 
+0

不,這不起作用,因爲迭代是錯誤的。你不能(安全地)用'for($ i = 0; $ i <$ max; ++ $ i)'來遍歷一個關聯數組。你正在做的是遍歷鍵0 .. $ max,但在assoc數組中,鍵可以是任何東西。如果你想採用這條路線,你需要遍歷'array_values($ milestone ['milestonefases'])''。並且請不要在for循環中將比較函數中的函數調用。如果隨着時間的推移數據集越來越大,它可能會觸發非常昂貴的性能問題。相反,將count($ milestone ['milestonefases'])'分配給變量$ max。 –

+0

是的你是正確的我沒有注意到鑰匙。我們必須使用foreach而不是for循環。更正了我的答案 – Mahesh

1

這是檢查是否是數組,你可以用它使用相同的foreach像@Aron說:

foreach ($stones as $milestone) 
{ 
    echo '<tr id="'. $milestone['milestone_id'] . '" class="milestone'. $milestone['milestone_id'] . '">'; 
    echo '<td>'. $milestone['milestone_id'] . '</td>'; 
    echo '<td><a href="javascript:keuzeGebruiker(\'milestone'.$milestone['milestone_id']. '\',\''.$milestone['milestone_id'].'\');">' . $milestone['milestone_titel'] . '</a></td>'; 
    echo '<td>'. $milestone['client'] . '</td>'; 
    echo '</tr>'; 
if(is_array($milestone['milestonesfases'])){ 
    foreach ($milestone['milestonesfases'] as $key => $value) { 
     echo '<tr>'; 
     echo '<td>'. $value['milestonefase_id'] . '</td>'; 
     echo '<td>'. $value['milestonefase_titel'] . '</td>'; 
     echo '<td></td>'; 
     echo '</tr>'; 
    } 
    } 
}