【问题标题】:How to check the checkbox when in_array is true当in_array为真时如何检查复选框
【发布时间】:2016-05-19 02:12:26
【问题描述】:

in_array 函数为真时,我需要选中复选框。循环运行良好,但它会检查所有复选框 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=11-26-50

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 是真的。但它会检查循环中的每个输入。我不明白为什么。

【问题讨论】:

  • 这是因为该值每次都在数组中,而不管我们循环的是什么
  • codeHeart 是对的。您迭代 $pixArr,但只检查 $fTime 和 $dTime,它们不会改变。我想您必须改为检查 $val['imgTime'] 吗?但是你必须调整使用的时间格式
  • 我认为如果您提供有关该问题的一些背景知识,给出答案会更容易,现在我们不知道什么是 dtime 或 ftime 以及您想要实现什么.正如弗朗茨所说,这也可以是一个解决方案

标签: php checkbox


【解决方案1】:

您需要在 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
}

【讨论】:

    【解决方案2】:

    这是您需要检查的问题,因为您描述的问题

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

    【讨论】:

      【解决方案3】:

      我现在知道了。因为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 提供的线索以及每个答案。

      【讨论】:

        【解决方案4】:

        要将“时间”值作为字符串进行比较,它们应该采用相同的格式:

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

        【讨论】:

        • 这是替换数组中字符串的新技巧(我的)。非常感谢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-14
        相关资源
        最近更新 更多