【问题标题】:Issue comparing two exploded php arrays to find overlap比较两个爆炸的 php 数组以查找重叠的问题
【发布时间】:2013-04-09 12:34:32
【问题描述】:

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

数组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)。

编辑我已经运行了几个打印联系人数组的测试,并将各种标签字符串应用于这些联系人,并且即使其他几个联系人有 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;
    }
  }
}

【问题讨论】:

  • 您只是检查array_intersect 的结果是否已设置并且它是否包含超过0 个项目。除此之外你什么也没做......我猜tag_b在那里,你只是没有使用它。
  • 抱歉,再次阅读我的帖子,我不是很清楚......为了提供更多上下文,我已经运行了几个测试打印联系人数组并将各种标签字符串应用于这些联系人,只有即使其他几个联系人具有 tag_a,也会返回具有 tag_a 第一个(在数组中)的联系人,尽管它不是数组中的第一个。
  • @Mischa 重新格式化他的代码让你真正注意到了,你会注意到我不小心删除的$ 符号。
  • @Fred,这是对another question 的编辑,我没有触及。我说的是您删除了 this question 上的缩进,这使问题更难阅读。

标签: php arrays codeigniter explode array-intersect


【解决方案1】:

试试 array_uintersect()

这里 $arr1 是你的第一个数组,$arr2 是第二个数组

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

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

这应该给你两个值

【讨论】:

  • 是的,我在另一个线程中看到了这个,但是当我尝试这个时,我收到了这个错误消息:消息:array_uintersect() [function.array-uintersect]: Not a valid callback compareDeepValue
  • 尝试在 $intersect = array_uintersect($arr1, $arr2, 'compareDeepValue'); 上方定义 compareDeepValue 函数;
【解决方案2】:

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

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

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

【讨论】:

  • 对不起,再次阅读我的帖子,我不是很清楚....为了提供更多上下文,我运行了几个测试打印联系人数组并将各种标签字符串应用于这些联系人和 即使其他几个联系人具有 tag_a,也会返回首先具有 tag_a(在数组中)的联系人,尽管它不是数组中的第一个。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多