Вы можете конвертировать массивы, используя карту массива, как это
$a1 = array_map('intval', $a1);
$a2 = array_map('intval', $a2);
Тогда сделайте ваш массив разным, а что нет.
@ Решение Ника более элегантно.
Потому что массивы не идут в 2 раза больше, чем вам действительно нужно. Конечно, если вы знаете, что такое строка, вы можете просто конвертировать ее, но я подумал, что выложу другой способ сделать это ...
Для тестирования вы можете просто сделать это
$a = [
"1",
"2" ,
"3"
];
var_dump($a);
var_dump(array_map('intval', $a));
Выход
array(3) {
[0]=> string(1) "1"
[1]=> string(1) "2"
[2]=> string(1) "3"
}
array(3) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
}
Песочница
И это показывает, что он конвертирует значения в строку, что было довольно очевидно, но мне нравятся примеры. Итак, поехали.
Ура!
UPDATE
После того, как мы выполнили простую разметку с массивом из 100 000 строковых чисел и взяли среднее время из 100 итераций, понадобилось приблизительно 0,0072 в секунду, чтобы преобразовать массив обратно в целые числа:
//setup
$a = array_map('strval', range(0, 100000));
//get microtime as float after setup
$time = microtime(true);
//use the average of 100 conversion for consistency
$iterations = 100;
for($i=0;$i<$iterations; ++$i){
$b = array_map('intval', $a); //set to $b so we don't convert $a on our first iteration.
//check the first iteration, to make sure we have it setup correctly for our averaging
if($i==0)
echo number_format(
((microtime(true) - $time)),
4
)." \seconds\n\n";
}
echo number_format(
((microtime(true) - $time) / $itterations),
4
)." \seconds\n";
выход
0.0067 \seconds
//if these are close (which they are) we have everything setup right,
//it's better to take the average for speed testing.
//and I just wanted to double check that it was being done correctly
0.0072 \seconds
Песочница
-note- в песочнице всего 134 Мб оперативной памяти для PHP (я специально выбрал ее из памяти, чтобы проверить это .. смеется)
<b>Fatal error</b>: Allowed memory size of 134217728 bytes exhausted
Update1
Было отмечено, что желаемый вывод не был указан, поэтому вот как получить все уникальные значения:
Если вы хотите уникальные значения из обоих массивов, вы можете сделать
$unique = array_unique(array_replace($a1,$a2));
И если массивы заранее уникальны, вы можете просто сделать array_replace
, потому что вы будете объединять 2 уникальных массива, заменяя любые в одном массиве, которые дублируются в другом. Поэтому результатом будет уникальная комбинация из 2 уникальных массивов, если это имеет смысл.