2016-07-19 13 views
1

Ich habe 2 mehrdimensionalen Arrays $investmentProgramExistingCriteriaoutput und $criteria die, wenn sie gedruckt (print_r) die folgende Ausgabe erzeugt:Erzeugen von Kontrollkästchen für einen bestimmten Schlüssel in mehrdimensionales Array

Array $ investmentProgramExistingCriteriaoutput:

Array 
(
[0] => Array 
    (
     [key1] => 1 
     [key2] => 4 
     [criteriaID] => 25 
    ) 

[1] => Array 
    (
     [key1] => 2 
     [key2] => 4 
     [criteriaID] => 26 
    ) 

) 

Array $ Kriterien Ausgabe:

Array 
(
[0] => Array 
    (
     [criteriaID] => 27 
     [key3] => 1 
     [key4] => Some value 
     [key5] => Yes 
     [key6] => 3 
     [key7] => 1 
    ) 

[1] => Array 
    (
     [criteriaID] => 25 
     [key3] => 5 
     [key4] => Some other value 
     [key5] => 1, 2, 3 
     [key6] => 1 
     [key7] => 1 
    ) 

[2] => Array 
    (
     [criteriaID] => 26 
     [key3] => 1 
     [key4] => Some different value 
     [key5] => Ναί 
     [key6] => 1 
     [key7] => 1 
    ) 

) 

Ich versuche, Kontrollkästchen für jedes Element in $criteria Array zu generieren. Wenn das Array criteriaID im Array $criteria jedoch im Array $investmentProgramExistingCriteriaoutput vorhanden ist, sollte das Kontrollkästchen aktiviert sein. Ist dies nicht der Fall, sollte es deaktiviert sein.

Ich versuche, dass mit dem folgenden Code zu tun:

foreach ($criteria as $val) { 
    foreach ($investmentProgramExistingCriteria as $existingcriteria) { 
     if($val['criteriaID'] == $existingcriteria['criteriaID']) { 
      echo "<input type='checkbox' name='criteria[]' value=".$val['criteriaID']." style='margin-bottom:20px;float:left;' checked='checked' />&nbsp;&nbsp;&nbsp;"; 
      echo "<span style='line-height:20px;'>".$val['criteriaDescription'] ."</span><br /><br />"; 
     } else { 
      echo "<input type='checkbox' name='criteria[]' value=".$val['criteriaID']." style='margin-bottom:20px;float:left;' />&nbsp;&nbsp;&nbsp;"; 
      echo "<span style='line-height:20px;'>".$val['criteriaDescription'] ."</span><br /><br />"; 
     } 
    } 
} 

Wie Sie aus dem oben genannten Array-Wert sehen, I 3 Kontrollkästchen erhalten soll, von denen 2 überprüft werden soll. Dieser Code druckt jedoch 6 Ankreuzfelder anstelle von 3,

2 der 6 gedruckten Ankreuzfelder werden überprüft (richtig). Wie kann ich doppelte Checkboxen entfernen?

Antwort

2

Anstatt verschachtelte Schleifen können Sie versuchen, das erste Array (hier kurz abgekürzt) zu durchlaufen und criteriaID einem neuen Array zuzuweisen. Dann iteriere durch das Array criteria und überprüfe, ob der Wert existiert.

$ipec=array(
    array('k1'=>1,'k2'=>4,'criteriaID'=>25), 
    array('k1'=>2,'k2'=>4,'criteriaID'=>26) 
); 
$criteria=array(
    array('criteriaID'=>27,'k3'=>1,'k4'=>4), 
    array('criteriaID'=>25,'k3'=>1,'k4'=>4), 
    array('criteriaID'=>26,'k3'=>1,'k4'=>4) 
); 

$cids=array(); 
foreach($ipec as $a)$cids[]=$a['criteriaID']; 


foreach($criteria as $a){ 
    $c=$a['criteriaID']; 
    $checked = in_array($c, $cids) ? 'checked=true' : ''; 

    /* There is no key "criteriaDescription" in the quoted arrays */ 
    echo " 
     <input type='checkbox' name='criteria[]' value='{$c}' style='margin-bottom:20px;float:left;' {$checked} /> 
     &nbsp;&nbsp;&nbsp; 
     <span style='line-height:20px;'>{$val['criteriaDescription']}</span> 
     <br /> 
     <br />"; 
} 
+0

Ich musste nur die $ val mit $ a ersetzen, und arbeitete wie ein Charme. Vielen Dank. – user2417624

+0

oops, habe nicht bemerkt, dass wenn ich gepostet habe - Junge, es ist alles ticketyboo jetzt! – RamRaider

1

Sie sind natürlich beide Bedingungen in Ihrem inneren Schleife erhalten, wie Sie durch das Array verarbeiten

Statt eine Reihe von $investmentProgramExistingCriteria bauen enthält nur das Feld, das Sie interessiert sind, und verwenden Sie in_array() den Test zu tun nur einmal pro Outer Schleife

$existingcriteria = array_column($investmentProgramExistingCriteria, 'criteriaID'); 

foreach ($criteria as $val) { 

    if (in_array($val['criteriaID'], $existingcriteria) { 
     echo "<input type='checkbox' name='criteria[]' value=".$val['criteriaID']." style='margin-bottom:20px;float:left;' checked='checked' />&nbsp;&nbsp;&nbsp;"; 
     echo "<span style='line-height:20px;'>".$val['criteriaDescription'] ."</span><br /><br />"; 
    } else { 
     echo "<input type='checkbox' name='criteria[]' value=".$val['criteriaID']." style='margin-bottom:20px;float:left;' />&nbsp;&nbsp;&nbsp;"; 
     echo "<span style='line-height:20px;'>".$val['criteriaDescription'] ."</span><br /><br />";  
    } 
}