【问题标题】:Array Should Only Contains Values From Other Array数组应该只包含来自其他数组的值
【发布时间】:2020-02-17 14:18:09
【问题描述】:

我有两个数组。

$uploaded_array = array("image/jpeg", "image/jpeg", "image/gif", "image/png", "text/html");
$allowed_array = array("image/jpeg", "image/gif", "image/png");

我需要一个函数来实现特定目标。 条件是, 1.uploaded_array 只能包含来自 allowed_array 的元素。 2. upload_array 可以不包含 allowed_array 中的所有元素,但是 upload_array 不应包含任何未出现在 allowed_array 中的元素。 3.只要元素也存在于 allowed_array 中,upload_array 也可以有重复元素。

我只是将上传的图像文件类型存储到 upload_array 中,然后我定义了 allowed_array 来设置可接受的文件类型格式。

感谢您的回答。

自己找到了一种解决方案。只需从第一个数组中消除重复项并比较两个数组的差异,然后计算差异。如果计数大于 0,则表示第一个数组有一个元素不存在于第二个数组中。

$uploaded_array = array_unique(array("image/jpeg", "image/jpeg", "image/gif", "image/png", "text/html"));
$allowed_array = array("image/jpeg", "image/gif", "image/png");
$acceptable_format=count(array_diff($uploaded_array,$allowed_array));


if($acceptable_format==0) {
//all files are acceptable
} else {
//some files are not in valid format
}

【问题讨论】:

  • 这就是你自己能想到的所有代码?
  • “我尝试了各种条件,但都没有奏效” - 向我们展示你当时实际尝试的内容。不要假装像if(condition){ 这样的东西是一个实际的尝试——它不是,只是在某个地方写“条件”,在这里很难被认为是这样的。
  • 这与我需要“解决这个问题”无关。这是关于你这边明显缺乏研究。当我进行互联网搜索时,到处都有许多有用的数组函数......
  • 1, 2, 3, 4, 5,...够了吗?
  • @trincot 那些没有出现在我的搜索引擎中,对此感到抱歉。

标签: php arrays


【解决方案1】:

使用array_diff。如果结果为空,则可以,否则不可以。

if (array_diff($uploaded_array, $allowed_array)) {
    echo "not ok";
}

【讨论】:

    【解决方案2】:

    就是这样:

    $uploaded_array = array("image/jpeg", "image/jpeg", "image/gif", "image/png", "text/html");
    $allowed_array = array("image/jpeg", "image/gif", "image/png");
    
    foreach( $uploaded_array as $key => $mime ) {
      if( !in_array( $mime, $allowed_array ) )  {
        unset( $uploaded_array[$key] );
      }
    }
    
    print_r( $uploaded_array );
    

    【讨论】:

      【解决方案3】:

      你可以使用array_intersect:

      $uploaded_array = array("image/jpeg", "image/jpeg", "image/gif", "image/png", "text/html");
      $allowed_array = array("image/jpeg", "image/gif", "image/png","text/php");
      
      print_r(array_intersect($uploaded_array,$allowed_array));
      

      输出:

      Array
      (
          [0] => image/jpeg
          [1] => image/jpeg
          [2] => image/gif
          [3] => image/png
      )
      

      Demo

      【讨论】:

        【解决方案4】:
        $uploaded_array = array_unique(array("image/jpeg", "image/jpeg", "image/gif", "image/png", "text/html"));
        $allowed_array = array("image/jpeg", "image/gif", "image/png");
        $acceptable_format=count(array_diff($uploaded_array,$allowed_array));
        
        
        if($acceptable_format==0) {
        //all files are acceptable
        } else {
        //some files are not in valid format
        }
        

        不知何故让它自己工作。只是从第一个数组中消除重复项并比较两个数组的差异,然后计算差异。如果计数大于 0,则表示第一个数组具有第二个数组中不存在的元素。

        【讨论】:

        • 这是我answered...除了你实际上不需要计算。
        【解决方案5】:

        in_array+foreach 呢?

        $index = 0;
        foreach($uploaded_array as $key => $val) {
            if(in_array($val, $allowed_array)) {
                $aa[$index++] = $val;
            }
        }
        

        【讨论】:

        • 最好将in_array 中的第三个参数添加到 true 以检查类型(更好)
        猜你喜欢
        • 2014-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 2015-01-08
        • 1970-01-01
        相关资源
        最近更新 更多