【问题标题】:php array_intersect with strict typephp array_intersect 与严格类型
【发布时间】:2015-06-17 14:53:30
【问题描述】:

PHP array_intersect 没有任何严格类型检查的选项,因为他们已经给出了in_array

$array1 = array(true,2);

$array2 = array(1, 2, 3, 4, 5, 6);

var_dump(array_intersect($array1, $array2));

结果是:

array(2) {
  [0] =>  bool(true)
  [1]  =>  int(2)
}

预期结果在哪里

array(1) {
  [0]  =>  int(2)
}

我错过了什么吗?

可能问题与PHP array_intersect() - how does it handle different types?重复

【问题讨论】:

    标签: php casting array-intersect


    【解决方案1】:

    PHP 不是一种强类型语言,就它而言,任何不为假、为真并且将在布尔运算中进行评估的东西。 您可以在 PHP 手册 http://php.net/manual/en/language.types.boolean.php 上获得更多信息

    但是,PHP 确实提供了使用=== 严格检查类型的功能,正如您所说,array_intersect 不使用此功能,但可以使用array_uintersect 定义您自己的回调函数,该函数将执行值的比较。 http://php.net/manual/en/function.array-uintersect.php

    【讨论】:

      【解决方案2】:

      如果你想要严格的array_intersect,你可以写你自己的方法,像这样:

      <?php
          public function array_intersect_strict(array $array1, array $array2) {
              return array_filter($array1, function ($value) use ($array2) {
                  return in_array($value, $array2, true);
              });
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        • 2015-06-25
        • 2018-07-21
        • 2012-11-12
        • 2013-10-01
        • 1970-01-01
        相关资源
        最近更新 更多