为什么即使不满足条件,我的循环也会破坏并出现错误?

时间:2015-05-14 05:25:02

标签: php arrays foreach associative-array break

我已经关注了代码片段:

        $aSupportedImages = array('jpg', 'gif', 'png');
        foreach($vshare as $file) {
          if(!in_array(pathinfo($file, PATHINFO_EXTENSION), $aSupportedImages))
            $errArr = 'File extension of image is wrong';
            echo $errArr;              
            break;
        }

数组$ vshare如下(print_r($vshare);的输出):

Array
      (
          [IMG_0004.jpg] => Array
              (
                  [0] => https://www.filepicker.io/api/file/UYUkZVHERGufB0enRbJo
              )

      )

我不明白为什么即使文件具有数组$aSupportedImages中存在的扩展名之后,循环仍然被破坏并且出现错误“图像的文件扩展名错误”?

请帮帮我。

感谢。

3 个答案:

答案 0 :(得分:2)

您应该使用以下代码,
因为图片名称是数组的key,并且您在扩展程序中使用了value

编辑:正如其他用户所说,您在{}条件中缺少if括号

注意:当您只想执行一个语句而不是使用花括号时。如果要执行多个语句,则必须将语句包装成大括号。

   $aSupportedImages = array('jpg', 'gif', 'png');
    foreach($vshare as $key=> $value) {
      if(!in_array(pathinfo($key, PATHINFO_EXTENSION), $aSupportedImages))
        {
             $errArr = 'File extension of image is wrong';
             echo $errArr;              
             break;
        }
    }

答案 1 :(得分:0)

对if块使用括号{}并检查print_r语句。

答案 2 :(得分:0)

使用if语句括号:

foreach($vshare as $file) {
    if(!in_array(pathinfo($file, PATHINFO_EXTENSION), $aSupportedImages)) {
        $errArr = 'File extension of image is wrong';
        echo $errArr;
        break;
    }
}

此外,最好使用continue代替break。不破坏断开破坏循环和其他文件,但继续检查其他文件并仅在出现故障时显示错误。