Проблема, сравнивающая два взорванных массива 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));
Используйте мастер-массив для первого аргумента и массив для сравнения в качестве второго аргумента. Я не уверен, какая у вас проблема.