2016-07-19 2 views
1

У меня есть 2 многомерные массивы $investmentProgramExistingCriteriaoutput и $criteria, которые при печати (print_r) производит следующий вывод:порождающие флажков для определенного ключа в многомерном массиве

Массив $ investmentProgramExistingCriteriaoutput:

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

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

) 

массив долл. США:

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 
    ) 

) 

Я пытаюсь создать флажки для каждого элемента в массиве $criteria. Однако, если criteriaID в массиве $criteria существует в массиве $investmentProgramExistingCriteriaoutput, флажок должен быть проверен, если нет, его следует отключить.

Я пытаюсь сделать это с помощью следующего кода:

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 />"; 
     } 
    } 
} 

Как видно из приведенных выше значений массива, я должен получить 3 флажков, из которых 2 должны быть проверены. Однако этот код напечатать 6 флажков вместо 3,

2 из 6 напечатанных флажков отмечены флажками (правильно). Как я могу избавиться от двойных флажков?

ответ

2

Вместо вложенных циклов вы можете попробовать выполнить итерацию через первый массив (переименованный здесь для краткости) и присвоить criteriaID в новый массив. Затем выполните итерацию через массив criteria и посмотрите, существует ли это значение.

$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

Мне просто нужно было заменить $ val $ a и работать как шарм. Благодарю. – user2417624

+0

Упс, не заметил, что когда я отправил - парень, теперь это все ticketyboo! – RamRaider

1

Вы, конечно, получить оба условия в вашем внутреннем цикле, как вы обрабатываете через массив

Вместо построить массив из $investmentProgramExistingCriteria, содержащего только поле вы заинтересованы, и использовать in_array() сделать тест только один раз в петле за пределами

$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 />";  
    } 
}