array_udiff返回不同的结果 - php

我有这段代码来获取两个对象数组之间的区别:

$diff = array_udiff($a, $b,
    function($obj_a, $obj_b) {
        return $obj_a->id - $obj_b->id;
    }
);

$ a是

[
  {
    "id": "7",
    "attribute": "instagram"
  },
  {
    "id": "8",
    "attribute": "snapchat"
  },
  {
    "id": "9",
    "attribute": "facebook"
  }
]

$ b是

[
  {
    "id": "7",
    "attribute": "instagram",
    "value": "somevalue"
  }
]

$ diff应该返回对象数组

[
  {
    "id": "8",
    "attribute": "snapchat"
  },
  {
    "id": "9",
    "attribute": "facebook"
  }
]

而且确实如此,但是仅当$ b是一个空数组时。然后结果是正确的(我得到了对象数组$ a,因为$ b为空)。

但是,当$ b中至少有一个对象时,$ diff将返回我不想要的以下对象。

{
  "1": {
    "id": "8",
    "attribute": "snapchat"
  },
  "2": {
    "id": "9",
    "attribute": "facebook"
  }
}

如何获取结果而不是上面的对象数组?以及为什么两个结果之间存在差异?谢谢。

参考方案

您只需在使用$diff = array_values($diff);之前先使用json_encode,以使索引从零开始。

当您执行array_udiff时,将保留$a的键,因此$diff的键从1而不是0开始。为了使json_encode将数组编码为JSON数组而不是JSON对象,键必须是连续的并且从零开始。 array_values将为数组重新索引,以便满足此条件。

请注意,即使从数组中删除了其他项,而不是从第一个项中删除了这些项,以使索引仍然以零开头,但由于缺少键,您仍需要重新索引$diff

内置函数的PHP源代码 - php

PHP是用C编写的吗?在哪里可以找到PHP源代码,而无需下载所有源代码? 参考方案 PHP函数是用C编写的-您可以在lxr.php.net中找到可浏览的源代码。例如:http://lxr.php.net/opengrok/xref/PHP_5_3/ext/standard/array.c#1242PS:通常,只需在搜索中键入函数名称即可找到函数定义。使用诸如…

PHP:从函数返回值并直接回显它? - php

这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…

php-printf和sprintf具有不同的输出 - php

我编写了以下微型php程序来测试printf和sprintf:<?php $str_1 = printf("%x%x%x", 65, 127, 245); $str_2 = sprintf("%x%x%x", 65, 127, 245); echo $str_1 . "\n"; echo $s…

PHP json_encode数组到javascript关联数组 - javascript

我有一些从PHP中读取的mysqli列。它正在完美地获取和回显。$results = mysqli_fetch_assoc(mysqli_query($conn, $querystring)); echo json_encode($results); //$results = {"title":"Sea Shells"…

PHP:如何知道链接是否是有效的YouTube链接? - php

这是例子。www.youtube.com, http://www.youtube.com/, http://www.youtube.com/watch?v=YoB8t0B4jx4 我不在乎它是否具有视频或仅YouTube网址,而只有有效网址。我想做的是,当我知道它是有效的YouTube网址时,我将检查它是否具有视频ID。如果它具有ID,我将为视频添加ifra…