-1

2つのアレイがあります。1つは元のデータで、もう1つは新しいデータです。それらの2つの間に一致する値がある可能性があります。そして、新しいインバウンド配列から、何が新しく、何が一致し、何が一致しないかを理解する必要があります。

最終的な目標は、これらの3つの配列、元のアイテムから削除されたアイテムの1つ、新しいエントリであるアイテムの1つ、および新しいエントリのいずれかに一致する元のエントリが必要になることです。

元の配列または新しい配列をループで循環させ、それらを比較して、古い配列と新しい配列を追加し、それぞれの配列を削除して、そこで結果を処理できるようにするために、3つの空白の配列から始める程度のことを考えていました。後。これは、出力として2つの配列で機能するアイデアを頭の中でつなぎ合わせることができますが、3つ目は迷子になります。だから私は今のところこのビットにちょっと邪魔をしました。アドバイスやヘルプを探しています私が探している3セットの結果をもたらすループまたはより良いものを作成します。

データベースからの元のデータの配列:

Array(
      15,
      22,
      100,
      1500,
      2000,
      500,
      3000,
      1101
   )

インバウンドの新しいデータの配列

Array(
      100,
      800,
      920,
      1500,
      2000,
      1603,
      500,
      3000,
      1101
   )

元の一致と新しい受信の一致の配列:

Array(
      100,
      1500,
      2000,
      500,
      3000,
      1101
   )

元のエントリと新しいエントリの間の予想される「新しい」エントリの配列:

Array(
      100,
      800,
      920,
      1603
   )

元のエントリと新しいエントリが一致しない、古いものから予想されるエントリの配列:

Array(
      15,
      22
   )

私は明らかにこれらを手で入力しただけなので、それはスポットではないかもしれません..しかし、うまくいけば、それは私がある程度達成しようとしていることを示しています

4

1 に答える 1

3

バーマーのコメントは正しく、array_diffあなたarray_intersectが望むものです。質問にタイプミスがありますが、一致と新しい値の配列の両方に「100」が表示されます。

<?php
$orig = array(15, 22, 100, 1500, 2000, 500, 3000, 1101);
$post = array(100, 800, 920, 1500, 2000, 1603, 500, 3000, 1101);

// Gets things in both arrays
$matches = array_intersect($orig, $post);
// Gets things in $post that aren't in $orig
$new     = array_diff($post, $orig);
// Gets things in $orig that aren't in $post
$removed = array_diff($orig, $post);

foreach (array($orig, $post, $matches, $new, $removed) as $array) {
    print_r($array);
}

私の推測では...あなたはチェックボックスまたは複数選択を処理して、何を保持し、何を追加し、何を削除するかを決定しています。

于 2012-10-23T04:39:05.930 に答える