2017-10-12 4 views
0

Je suis au stage et je suis en train de développer un tableau HTML qui a des jalons et des milestoneparts (dans ce projet nous l'appelons milestonefase). Chaque étape a un tas de milestonefases.PHP-Multidimensional-Array ne fait pas de boucle array

A titre d'exemple: Milestone99 a milestonefase 10, milestonefase14.

Ces données proviennent de deux tables de base de données différentes. Mon tableau ressemble à ceci:

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 
) 

Ma question est: Comment puis-je rigole en boucle tous milestonefases qui est relié à étape 6 (dans ce cas)

Ma boucle ressemble à ceci:

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>'; 
    } 
} 

Ce '10' dans ma boucle doit être tout milestonefase_id (qui est 10, 11, 12, 13, 14, 15 dans ce jalon).

Comment puis-je gérer toutes les jalons?

Attention! il doit travailler pour tous les jalons non seulement ce s'il vous plaît

Ce morceau de milestones œuvres mais milestonefases ne fonctionne pas.

Pouvez-vous m'aider ou avez-vous une solution? Aidez-moi s'il vous plaît.

Répondre

1

Au lieu d'utiliser une boucle,

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

Faites une boucle 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

merci monsieur, cela a fonctionné! – Haffoo

0

s'il vous plaît essayer

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

Non, cela ne fonctionnera pas, car l'itération est incorrecte. Vous ne pouvez pas (sûrement) parcourir un tableau associatif avec 'for ($ i = 0; $ i <$ max; ++ $ i)'. Ce que vous faites est itérer sur les touches 0 .. $ max mais dans un tableau assoc les clés peuvent être n'importe quoi. Si vous voulez prendre cette route, vous devez parcourir sur 'array_values ​​($ milestone ['milestonefases'])'. Et s'il vous plaît, ne mettez pas un appel de fonction à l'intérieur de la comparaison dans une boucle for. Cela peut déclencher des problèmes de performances très coûteux si l'ensemble de données augmente au fil du temps. Au lieu de cela, éclatez le 'count ($ milestone ['milestonefases'])' dans une variable $ max. –

+0

oui vous avez raison je n'ai pas remarqué la clé. nous devons utiliser foreach au lieu de for loop. Corrigé ma réponse – Mahesh

1

Ceci est Vérifier si est un tableau et vous pouvez l'utiliser en utilisant le même foreach comme @Aron Said:

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>'; 
    } 
    } 
}