比较两个分解的php数组以查找重叠的问题

比较两个分解的php数组以查找重叠的问题,php,arrays,codeigniter,explode,array-intersect,Php,Arrays,Codeigniter,Explode,Array Intersect,我正在比较两个分解字符串(查询结果)的结果,但当我使用array_intersect查找数组的重叠时,不幸的是,我只接收到每个数组中最先出现的标记的重叠…因此,例如,如果两个数组看起来像这样: if ($frequency == 'Weekly') { $data['query_tag'] = $this->db->get('tags'); foreach ($data['query_tag']->result() as $row2) { $contact

我正在比较两个分解字符串(查询结果)的结果,但当我使用array_intersect查找数组的重叠时,不幸的是,我只接收到每个数组中最先出现的标记的重叠…因此,例如,如果两个数组看起来像这样:

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;
    }
  }
}
阵列1:

array(
  [0]=> tag_a
  [1]=> tag_b
)
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;
    }
  }
}
阵列2:

array(
  [0]=> tag_a
  [1]=> tag_b
)
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;
    }
  }
}
数组_Intersect仅返回标记_a作为匹配项。我期望数组_intersect的行为返回标记a和选项卡b

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;
    }
  }
}
正如您稍后在我的代码中所看到的,我将使用匹配项(两个数组中都有标记)来构建数组contactarray。我可以构建数组,但它不包含我期望的值(例如:tag_b)

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;
    }
  }
}
编辑我已经运行了几个打印contactarray的测试,并对这些联系人应用了各种标记字符串,并且仅返回具有第一个标记a的联系人(在数组中),即使其他几个联系人具有标记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;
    }
  }
}

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

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;
    }
  }
}
$arr = array( 'tag_a','tab_b ');

$arr = array('tag_a','tab_b ');
print_r(array_intersect($arr, $arr));
尝试数组_uintersect()

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;
    }
  }
}
这里$arr1是第一个数组,$arr2是第二个数组

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;
    }
  }
}
$intersect = array_uintersect($arr1, $arr2, 'compareDeepValue');
print_r($intersect);

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

这将为您提供两个值,第一个参数使用主数组,第二个参数使用数组进行比较。
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;
    }
  }
}

我不确定您遇到了什么问题。

您只是在检查
array\u intersect
的结果是否已设置,并且包含的项目是否超过0项。除此之外你什么都没做。。。我猜
tag_b
在那里,你只是没有使用它。对不起,再次阅读我的帖子,我不是很清楚……为了提供更多的上下文,我已经运行了几个打印contactarray的测试,并将各种标记字符串应用于那些联系人,并且只应用于那些先有tag_a的联系人(在数组中)正在返回,即使其他几个联系人有标记a,但它不是数组中的第一个。@Misha如果你真的注意到重新格式化他的代码,你会注意到我意外删除的
$
符号。@Fred,这是我没有碰过的编辑。我说的是,你删除了这个问题上的缩进,这使问题更难阅读。对不起,再次阅读我的帖子,我不是很清楚……为了提供更多的上下文,我已经运行了几个打印contactarray的测试,并将各种标记字符串应用于这些联系人,并且仅应用于先有标记a的联系人(在数组中)被返回,即使其他几个联系人有标记_a,但这不是数组中的第一个。是的,我在另一个线程中看到了这一点,但当我尝试此操作时,我收到以下错误消息:消息:array_uintersect()[function.array uintersect]:不是有效的回调comparedepvalue尝试在$intersect=array_uintersect($arr1,$arr2,'Comparedepvalue')上方定义comparedepvalue函数;
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;
    }
  }
}