php - 如何使用 'array_uintersec' 比较两个数组的条件?

标签 php arrays intersection

我有下一个数组:

$noticias = [
    "0" => Array(
        "codigo" => "AMBITO"),
    "1" => Array(
        "codigo" => "ELSOL"),
    "2" => Array(
        "codigo" => "MDZ")
    ]

$portales = [
    "0" => Array(
        "codigo" => "LOSANDES"),
    "1" => Array(
        "codigo" => "MDZ"),
    "2" => Array(
        "codigo" => "ELSOL")
    ]

我需要通过属性 codigo 比较两个数组。结果将是:

$result = [
    "1" => Array(
        "codigo" => "ELSOL"),
    "2" => Array(
        "codigo" => "MDZ")
    ]

我该怎么办?此刻,我有这个:

$noticias_provinciales = array_uintersect($noticias, $portales, function($noticia, $portal_provincial){            
                $portal_codigo_noticia = $noticia['Portal__codigo'];
                $portal_codigo_provincial = $portal_provincial->codigo;
                return ($portal_codigo_noticia === $portal_codigo_provincial ? 0: 1);            
            });

但这对我不起作用。我正在调试,我注意到变量 $noticia$portal_provincial 来自同一个数组 ($noticia)。 我希望函数中的第一个变量是 $noticia(来自 $noticias),第二个变量是 $portal(来自 $传送门)。我该怎么做?

谢谢!

最佳答案

我已将您的代码放入 PHP 沙箱中并对其进行了改进,因此以下代码至少可以在 PHP 5.4.10 到 PHP 7 下运行。

$noticias = [
    "0" => Array(
        "codigo" => "AMBITO"),
    "1" => Array(
        "codigo" => "ELSOL"),
    "2" => Array(
        "codigo" => "MDZ")
]; // no changes here

$portales = [
    "0" => Array(
        "codigo" => "LOSANDES"),
    "1" => Array(
        "codigo" => "MDZ"),
    "2" => Array(
        "codigo" => "ELSOL")
]; // no changes here


$noticias_provinciales = array_uintersect($noticias, $portales, function($noticia, $portal_provincial){            
            $portal_codigo_noticia = $noticia['codigo'];
            $portal_codigo_provincial = $portal_provincial['codigo'];
            return strcasecmp($portal_codigo_noticia, $portal_codigo_provincial);            
        });

var_dump($noticias_provinciales);

您的代码存在的问题是(从我的角度来看):

  • 访问数组成员错误。 $portal_provincial->codigo 不起作用,因为 $portal_provincial 不是对象。没有名为 'Portal__codigo' 的索引。
  • strcasecmp($portal_codigo_noticia, $portal_codigo_provincial)($portal_codigo_noticia === $portal_codigo_provincial ? 0: 1) 的用法不一样。现在我无法解释原因,但对我来说只有 strcasecmp() 有效。然而,strcasecmp() 更优雅但可能有点慢。

关于php - 如何使用 'array_uintersec' 比较两个数组的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35942523/

相关文章:

php - 计算按日期分组的 2 个不同表的条目并在 Laravel 4.2 中合并结果

php - 格式化 sql/php 代码的更聪明的方法?

php - 连接和使用 mysqli_insert_id() 的返回类型有什么问题?

Java,递归反转一个数组

php - 使用 Localhost 登录

php - 按数值对 PHP 数组进行排序

C语言: Implicit conversion from 'int' to 'char' changes value from 12592 to 48

python - python中 'set.intersection()'的算法是什么?

r - 如何获得共享至少 4 列的公共(public)组的最大行集?

c++ - 两个 vector 的集合交集的高效或快速大小