Проблема, сравнивающая два взорванных массива php, чтобы найти перекрытие

Я сравниваю результаты двух разнесенных строк (результаты запроса), хотя, когда я использую array_intersect, чтобы найти перекрытие массивов, я, к сожалению, получаю перекрытие только тех тегов, которые идут первыми в каждом массиве... так например, если два массива выглядят так:

Array1:

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

array2:

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;
    }
  }
}

3 ответа

Решение

Попробуйте array_uintersect()

Здесь $arr1 - ваш первый массив, а $arr2 - второй массив

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

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

Это должно дать вам оба значения

Не уверен, где проблема, с которой вы столкнулись, скопируйте этот код, и вы увидите два значения правильно.

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

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

Используйте мастер-массив для первого аргумента и массив для сравнения в качестве второго аргумента. Я не уверен, какая у вас проблема.

Другие вопросы по тегам