0

2 つの展開された文字列 (クエリの結果) の結果を比較していますが、array_intersect を使用して配列のオーバーラップを見つけると、残念ながら、各配列で最初に来るタグのオーバーラップしか受け取りません...たとえば、2 つの配列が次のようになっているとします。

配列 1:

array(
  [0]=> tag_a
  [1]=> tag_b
)

配列 2:

array(
  [0]=> tag_a
  [1]=> tag_b
)

Array_Intersect は一致としてtag_aのみを返します。array_intersect の動作が、tag_a と tab_b を返すことを期待していました。

コードの後半でわかるように、次に一致するもの (両方の配列に存在するタグ) を使用して、配列contactarrayを構築しています。配列を作成できましたが、期待した値が含まれていません (例: tag_b)。

編集 contactarray を印刷するいくつかのテストを実行し、それらの連絡先にさまざまなタグ文字列を適用しました。他のいくつかの連絡先に tag_a があるにもかかわらず、(配列内で) 最初に tag_a を持つ連絡先のみが返されます。配列。考え?

if ($frequency == 'Weekly')
{
  $data['query_tag'] = $this->db->get('tags');

  foreach ($data['query_tag']->result() as $row2)
  {
    $contact_tags = $row2->tags;
    $contact_tags_exploded = explode(",", $contact_tags);

    $rule_tags_exploded = explode(",", $rule_tags);
    $result = array_intersect($rule_tags_exploded, $contact_tags_exploded);

    if(isset($result) && count($result) != 0){
      $contactarray[] = $row2->contact_name;
    }
  }
}
4

3 に答える 3

2

array_uintersect() を試す

$arr1 は最初の配列で、$arr2 は 2 番目の配列です

$intersect = array_uintersect($arr1, $arr2, 'compareDeepValue');
print_r($intersect);

function compareDeepValue($val1, $val2)
{
   return strcmp($val1['value'], $val2['value']);
}

これにより、両方の値が得られるはずです

于 2013-04-09T12:42:56.427 に答える
0

最初の引数にマスター配列を使用し、2 番目の引数として比較する配列を使用します。どのような問題があるかわかりません。

于 2013-04-09T12:43:17.253 に答える