0

配列 A (以下) のデータを使用したいのですが、配列 A のアイテムID が配列B (以下) のIDと一致しない場合に限ります。これら 2 つの JSON 配列を PHP 経由で(から) IDのキーで比較するにはどうすればよいですか? 最初に で変換する必要があると思いますが、その後どこに行くべきかわかりませんか?itemsitemsjson_decode

配列 B には、配列 A とは異なり、より多くのネスト (「アイテム」、「何か」、および「投稿」) があることに注意し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 を介して実行され、3 番目の項目 (1) の ID が配列 B の ID の 1 つと一致するため、配列 A からすべてを出力します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

私の理解では、2 段階のプロセスが必要です。1 つ目は最初の JSON BLOB から ID を抽出し、2 つ目は 2 つ目の JSON BLOB をフィルタリングします。基本的に、 と がmapありfilterます。たまたま、PHP の組み込み関数を使用してこれを行うことができます。

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

まず、2 番目の配列の 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 に答える