【问题标题】:in_array, needle and haystack are both an arrayin_array、needle 和 haystack 都是一个数组
【发布时间】:2014-01-27 10:36:17
【问题描述】:

是否有检查数组中某些值的函数?我有 2 个数组,1 个带有文件扩展名,1 个带有混合内容。 In_array 仅适用于字符串。

已经谢谢了!

文件示例:

picture21474.png

允许的扩展:

$extensions = array('gif', 'jpg', 'png');

我在文件上的一个点上爆炸。但是当您使用explode 时,该文件被设置为一个array()。现在我想检查文件扩展名是否合法。类似 in_array($extensions, $explodedFile)

【问题讨论】:

  • 这个函数到底能做什么?看看针中的所有物品是否都在大海捞针中?至少一项?
  • 请提供更多信息。你想在哪个数组中搜索什么?
  • 您可以发布您尝试过的内容/示例数据源...

标签: php


【解决方案1】:

有 2 个函数可以帮助您:

  1. array_intersect ( array $array1 , array $array2 [, array $... ] ) array_intersect() 返回一个数组,其中包含所有参数中存在的 array1 的所有值。请注意,密钥是保留的。 http://ro1.php.net/manual/en/function.array-intersect.php

  2. array_diff ( array $array1 , array $array2 [, array $... ] ) 将 array1 与一个或多个其他数组进行比较,并返回 array1 中不存在于任何其他数组中的值。 http://ro1.php.net/array_diff

【讨论】:

    【解决方案2】:

    你可以试试array_intersect:

    $intersect = array_intersect($array1, $array2);
    echo count($intersect) . ' elements in array2';
    

    如果要检查$array1 中的所有元素是否都在$array2 中,请执行以下操作:

    if (count($intersect) == count($array1)) {}
    

    编辑:

    如果要检查文件的扩展名是否包含在扩展数组中,请执行以下操作:

    $filename   = 'picture21474.png';
    $extensions = array('gif', 'jpg', 'png');
    list($name, $extension) = explode('.', $filename);
    
    if (in_array($extension, $extensions) ) {
      // extension is valid
    }
    

    编辑 2:

    文件扩展名的有效获取:

    $filename = 'picture21474.png';
    $info     = pathinfo($filename);
    
    if (in_array($info['extension'], $extensions) ) {
      // extension is valid
    }
    

    【讨论】:

    • 我现在使用array_intersect,它工作正常。你的方式是更好还是更快?还是只是程序员的偏好?
    • 使用array_intersect 比循环数组更快。但是,如果您想检查扩展是否有效,最好使用我的第二个解决方案。
    • 你能给我解释一下代码吗?我听说过列表功能,但不知道我在做什么,而且 PHP.net 网站只有英文,所以很难理解它在信息不足的情况下做了什么
    • list() 函数将右侧数组中的元素分配给list() 中定义的变量。所以如果explode 函数返回:array(0 => 'picture21474', 1 => 'png') 那么$name 得到0 值,$extension 得到1 值。
    • 啊啊啊啊!很不错的功能!谢谢!但是,有一个小问题:如果用户使用文件名 picture.21474.png,那么数组会得到 3 种类型的值:0 = 图片,1 = 21474,2 = png
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2019-09-11
    相关资源
    最近更新 更多