当in_array为true时,如何选中复选框

时间:2016-02-09 07:26:24

标签: php checkbox

in_array函数为true时,我需要选中复选框。循环正常但它检查所有复选框bool是真还是假。

$ pixArr

Array(
    [12] => Array
        (
            [imgFile] => IMG_7516.JPG
            [imgTime] => 11:39
        )

    [13] => Array
        (
            [imgFile] => IMG_7515.JPG
            [imgTime] => 11:39
        )

)

$ DTIME

Array(
    [0] => 11-26-50
    [1] => 11-26-50
    [2] => 11-39-43
    [3] => 11-39-43
    [4] => 14-35-38
)

$ FTIME = 50年11月26日

foreach($pixArr as $key=>$val){
    if(in_array($fTime,$dTime)){
    echo "<input type=\"checkbox\" name=\"file[]\" value=\"$val[imgFile]\" checked/>&nbsp;Select</label>";
    }else{
    echo "<input type=\"checkbox\" name=\"file[]\" value=\"$val[imgFile]\"/>&nbsp;Select</label>";
    }
}

我希望检查时间11-26-50的输入。因为结果是in_array为真。但它会检查循环中的每个输入。我不明白为什么。

4 个答案:

答案 0 :(得分:1)

这是您需要检查的问题

foreach($dTime as $key=>$val)
{    
    if($fTime == $val)
    {
        echo "<input type=\"checkbox\" name=\"file[]\" value=\"$val[imgFile]\" checked/>&nbsp;Select</label>";
    }
    else
    {
        echo "<input type=\"checkbox\" name=\"file[]\" value=\"$val[imgFile]\"/>&nbsp;Select</label>";
    }
}

答案 1 :(得分:1)

比较时间&#39;值作为字符串应该以相同的格式:

$dTime = [
    0 => '11-26-50',
    1 => '11-26-50',
    2 => '11-39-43',
    3 => '11-39-43',
    4 => '14-35-38'
];

$dTimeFormatted = array_map(function($v){
    return substr(str_replace("-",":",$v), 0, 5);
}, $dTime); 

foreach ($pixArr as $key => $val) {
    $inTime = in_array($val['imgTime'], $dTimeFormatted);        
    echo "<input type=\"checkbox\" name=\"file[]\" value=\"{$val['imgFile']}\" ".(($inTime)? '"checked"':" " )."/>&nbsp;Select</label>";        
}

答案 2 :(得分:0)

您需要在foreach循环中更改$fTime。如果没有,那么您只需要遍历完整$pixArr,因为in_array($fTime,$dTime)始终为true

foreach($pixArr as $key=>$val){
    if(in_array($fTime,$dTime)){
    echo "<input type=\"checkbox\" name=\"file[]\" value=\"$val[imgFile]\" checked/>&nbsp;Select</label>";
    }else{
    echo "<input type=\"checkbox\" name=\"file[]\" value=\"$val[imgFile]\"/>&nbsp;Select</label>";
    }
    $fTime = //update fTime here
}

答案 3 :(得分:0)

我现在知道了。因为in_array中的比较值与循环无关。我无法将$fTime$dTime进行比较。我必须将$val[imgTime]$dTime 以相同的格式进行比较

这是重点。 现在 $ dTime 格式为HH-mm-ss,而 $ val [imgTime] HH:mm:ss

我必须将它们更改为相同的格式。所以我决定改变 $ val [imgTime]

$vTime=str_replace(":","-",$val['imgTime']);

所以,最后的脚本是:

foreach($pixArr as $key=>$val){
$vTime=str_replace(":","-",$val['imgTime']);
if(in_array($vTime,$dTime)){
    echo "<input type=\"checkbox\" name=\"file[]\" value=\"$val[imgFile]\" checked/>&nbsp;Select</label>";
}else{
    echo "<input type=\"checkbox\" name=\"file[]\" value=\"$val[imgFile]\"/>&nbsp;Select</label>";
}

感谢来自@codeHeart,@ frank和每个答案的线索。