Я создаю граненый поиск, и я пытаюсь использовать array_intersect
для сравнения массивов и поиска входных данных, которые соответствуют.
Проблема в том, что я буду иметь переменное количество массивов в любое время в зависимости от того, какие фильтры выбрал пользователь:
$array_1, $array_2, $array_3
т. д. …
Как создать функцию array_intersect
которая является динамической в этом смысле?
Это то, что я пробовал:
$next_array = 0; for($i = 0; $i < $array_count; $i++) { $next_array++; if ($i == 0) { $full_array = ${array_.$i}; } else { if(!empty(${cvp_array.$next_array})) { $full_array = array_intersect($full_array, ${cvp_array_.$next_array}); } } }
————- РЕДАКТИРОВАТЬ ————-
Я постараюсь немного сузить мою цель:
Если пользователь нажимает на три фильтра, это приводит к созданию трех массивов, каждый из которых имеет индивидуальные результаты:
Array_1 ( [0] => 2, [1] => 4, [2] => 6 )
Array_2 ( [0] => 1, [1] => 4, [2] => 6 )
Array_3 ( [0] => 6, [1] => 7, [2] => 8 )
Мне нужен код, который найдет номер, который находится во ВСЕХ массивов. И если нет общего числа, то это закончится как ложное или что-то еще. В приведенном выше случае мне понадобится его для извлечения 6. Если бы это были только первые два массива, он возвращался бы 4 и 6.
Прежде всего, превратите эти массивы в массив массивов. Затем вы можете использовать array_reduce
сочетании с array_intersect
чтобы уменьшить количество массивов переменных до одного.
Попробуй это:
$fullArray = array($array1, $array2, $array3...); call_user_func_array('array_intersect', $fullArray);
Вы можете превратить этот массив в один массив с именем $total_array
с помощью array_combine()
, а затем использовать array_intersect($full_array, $total_array)
. Я надеюсь, что это полезно