0

我正在比较两个爆炸字符串的结果(查询的结果),但是当我使用 array_intersect 查找数组的重叠时,不幸的是,我只收到了每个数组中首先出现的那些标签的重叠......所以例如,如果两个数组如下所示:

阵列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 是第二个数组

$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

不确定您面临的问题在哪里复制粘贴此代码,您将正确看到这两个值。

$arr = array( 'tag_a','tab_b ');

$arr = array('tag_a','tab_b ');
print_r(array_intersect($arr, $arr));
于 2013-04-09T12:41:04.043 回答
0

使用主数组作为第一个参数,使用数组作为第二个参数进行比较。我不确定你有什么问题。

于 2013-04-09T12:43:17.253 回答