我有两个数组,它们都有字符串类型的元素。示例:
第一阵列
$default_complaint = array("Login", "Printer", "Monitor", "Computer",
"Network", "Other");
第二阵列
$selected_complaint = explode(" ", $s['kindof_request']);
// Ex : it return like this => array ("Login", "Printer", "Monitor");
现在,我如何通过比较上面给出的两个数组来创建在html中打勾的复选框。所以,我这样创建:
<?php
$default_complaint = array("Login", "Printer", "Monitor", "Computer", "Network", "Lain-lain");
$selected_complaint = explode(" ", $s['kindof_request']);
foreach ($default_complaint as $dc) {
foreach ($selected_complaint as $sc) {
$check = strcmp($dc, $sc) ;
if ($check == 0) { //True
echo '<input type="checkbox" checked="checked">'. "$sc" ."<br />";
} else{ //false
echo '<input type="checkbox">'. "$dc"."<br />";
}
}
}
?>
我的代码仍然给我一个奇怪的结果。所以,如何创建这样,=>(0(的意思是检查。
(0)Login (0)Printer (0)Monitor ()Computer ()Network ()Others
这应该适用于您:
(您不必执行嵌套foreach循环(
<?php
$default_complaint = array("Login", "Printer", "Monitor", "Computer", "Network", "Lain-lain");
$selected_complaint = explode(" ", $s['kindof_request']);
foreach($default_complaint as $k => $v) {
if(isset($selected_complaint[$k]) && in_array($selected_complaint[$k], $default_complaint))
echo '<input type="checkbox" checked>' . $v . "<br />";
else
echo '<input type="checkbox">' . $v . "<br />";
}
?>
您有两个循环,但您只想在第一个数组上循环。第二个仅用于检查。
循环的一种可能性是:
foreach ($default_complaint as $dc) {
if (array_search($dc, $selected_complaint) !== FALSE) {
echo '<input type="checkbox" checked="checked">'. "$dc" ."<br />n";
} else{
echo '<input type="checkbox">'. "$dc"."<br />n";
}
}
您不需要两个foreach
循环。只有一个能做到。循环遍历$default_complaint
数组,并使用in_array()
检查该元素是否存在于$selected_complaint
数组中。尝试使用:
<?php
$default_complaint = array("Login", "Printer", "Monitor", "Computer", "Network", "Other");
$selected_complaint = explode(" ", $s['kindof_request']);
foreach ($default_complaint as $dc)
{
if (in_array($dc, $selected_complaint))
echo '<input type="checkbox" checked>' . $dc . '<br>';
else
echo '<input type="checkbox">' . $dc . '<br>';
}
?>
您也可以尝试array_search()
而不是in_array()
。