8

私は今、何時間もこれを手に入れようとしています。

私は2つの多次元配列を持っています

    $newData (
    [0] => Array(
        [id] => 1
        [name] => John
        [sex] => male
    )
    [1] => Array(
        [id] => 2
        [name] => Kenny
        [sex] => male
    )
    [2] => Array(
        [id] => 3
        [name] => Sarah
        [sex] => female
    )
    [3] => Array(
        [id] => 4
        [name] => George
        [sex] => male
    )
)

$oldData (
    [0] => Array(
        [id] => 3
        [name] => Sarah
        [sex] => female
    )
    [1] => Array(
        [id] => 4
        [name] => George
        [sex] => male
    )
    [2] => Array(
        [id] => 5
        [name] => Peter
        [sex] => male
    )
    [3] => Array(
        [id] => 6
        [name] => Lexi
        [sex] => female
    )
)

$newData と $oldData を比較して、最初の共通配列の前にある新しいデータのみを取得する必要があります。

私の $newData は次のようになります。

$newData (
[0] => Array(
    [id] => 1
    [name] => John
    [sex] => male
)
[1] => Array(
    [id] => 2
    [name] => Kenny
    [sex] => male
)

)

IDキーを比較しても、何も正しく機能しない場合は、array_uniqueからすべてを試しました。

最初にそれらをマージする必要がありますか? それらをマッピングしますか?ああ、私にはわからない、私はとても迷っています。

どんな助けでも素晴らしいでしょう

4

3 に答える 3

7

ネストされた foreach ループを実行するだけです。あなたが使用しているプログラミング言語はわかりませんが、PHP ($) であると仮定します。

$tmpArray = array();

foreach($newData as $data1) {

  $duplicate = false;
  foreach($oldData as $data2) {
    if($data1['id'] === $data2['id'] && $data1['name'] === $data2['name'] && $data1['sex'] === $data2['sex']) $duplicate = true;
  }

  if($duplicate === false) $tmpArray[] = $data1;
}

$tmpArray次に、変数に目的の配列があります。$newData = $tmpArray;もちろん後からでも作れます。

于 2013-04-21T19:55:07.213 に答える
1

?$newDataから最初の要素が見つかるまで繰り返します。$oldData

$cmp = $oldData[0];
$data = array();
foreach ($newData as $el) {
    if ($el['id'] === $cmp['id']
      && $el['name'] === $cmp['name']
      && $el['sex'] === $cmp['sex'])
        break;
    $data[] = $el;
}

新しいデータは に保存され$dataます。

于 2013-04-21T19:56:12.053 に答える
0

これを使ってみてはどうですか?thelamborghinistoryの回答を修正することで、

重複がある場合は、動的キーを設定解除します。

public function removeDuplicate($oldData, $newData, $key)
{
    $tmpArray = array();
    foreach ($newData as $data1) {
        $duplicate = false;
        foreach ($oldData as $data2k => $data2v) {
            if ($data1[$key] === $data2v[$key]) {
                unset($newData[$data2k]);
                $duplicate = true;
            }
        }
        if ($duplicate === true) {
            $tmpArray[] = $data1;
        } else {
            $tmpArray[] = $data1;
        }
    }
    return $tmpArray;
}

そして、あなたはただ電話しなければなりません、

removeDuplicate($oldData, $newData, 'name');//or whatever you want
于 2016-10-21T06:41:27.500 に答える