Этот код будет вызывать doBla()
один раз за каждый раз, когда в $numbers2
будет найдено значение $numbers1
:
// get [val => occurences, ...] for $numbers2
$counts = array_count_values($numbers2);
foreach ($numbers1 as $n1) {
// if $n1 occurs in $numbers2...
if (isset($counts[$n1])) {
// call doBla() once for each occurence
for ($i=0; $i < $counts[$n1]; $i++) {
doBla();
}
}
}
Если вам нужно только один раз вызвать doBla()
, если совпадениенайдено:
foreach ($numbers1 as $n1) {
if (in_array($n1, $numbers2))
doBla();
}
Если $numbers1
и $numbers2
будут содержать только уникальные значения или если не важно, сколько раз встречается какое-либо конкретное значение в обоих массивах, array_intersect()
выполнит работу:
$dups = array_intersect($numbers1, $numbers2);
foreach ($dups as $n)
doBla();
Я согласен с несколькими предыдущими постами, что вызовы doBla()
, вероятно, занимают больше времени, чем перебор массивов.