0

我想使用数组 A 中的数据(下),但仅当数组 A 中的项目ID与数组 B中的ID匹配时(也,下)。我将如何通过 PHP 通过ID (from ) 键比较这两个 JSON 数组?我想我首先需要将它们转换为,但我不知道在那之后去哪里?itemsitemsjson_decode

请注意,与数组 A 不同,数组 B 有更多的嵌套(“items”、“something”和“posts”)。我想比较来自 的 ID items而不是 posts

数组 A:

{
  "data": [{
      "category": "Games",
      "id": "45345"
    }, 
    {
      "category": "Music",
      "id": "345345345"
    }, 
    {
      "category": "Food",
      "id": "1"
    }, 
    {
      "category": "Pets",
      "id": "13245345"
    }]
}

阵列 B:

{
  "data":  {
    "something": "blah",
    "posts":  [{
        "id": "34241",
        "title": "orange"
      }],
    "items":  [{
        "id": "1",
        "name": "orange"
      },
      {
        "id": "2",
        "name": "dog"
      },
      {
        "id": "3",
        "name": "cat"
      },
      {
        "id": "4",
        "name": "apple"
      }]
  }
}

对于上述情况,它将遍历数组 A 并输出数组 A 中除第三项之外的所有内容,因为该项 (1) 的 id 与数组 B 中的一个 id 匹配items

4

2 回答 2

2

将项目解码为 PHP 数组。使用像 array_diff() 这样的 SPL 来获取差异比较的结果。

帮助您入门的参考资料:

http://www.php.net/manual/en/function.array-diff.php

http://php.net/manual/en/function.array-diff-key.php

http://www.php.net/manual/en/function.json-decode.php

应该是关于你在寻找什么

于 2013-02-25T18:25:08.023 回答
2

根据我的理解,您需要一个两步过程。第一个是从第一个 JSON blob 中提取 id,第二个是过滤第二个 JSON blob。所以基本上,我们有mapfilter。碰巧我们可以为此使用 PHP 的内置函数:

$ids = array_map(
    function($value) { 
        return $value['id']; 
    }, 
    $array2['data']['items']
);

首先,我们将第二个数组的 items 元素展平为单独的 id。我们在 data.items 数组上“映射”,并返回$id每个数组的属性。现在,我们有一个 id 数组...

$new = array_filter(
    $array1['data'],
    function($var) use ($ids) {
        return !in_array($var['id'], $ids);
    }
);

现在,我们使用它来过滤第一个 blobs 数组以确定一个元素是否是新的。所以我们使用数组过滤器来为我们处理它。我们需要做的就是检查$ids数组以查看当前数据的 id 是否存在(如果存在,则将其丢弃)。因此,我们希望将数组过滤为仅是not in array of $ids(因此!in_array($var['id'], $ids)...)的变量

于 2013-02-25T18:47:49.387 回答