Эта проблема была изучена в некоторых деталях.
существует ряд очень актуальных реализаций в TSpectrum*
классы КОРЕНЬ (ядерный аналитический инструмент / аналитический инструмент физики элементарных частиц). Код работает в одном - к трехмерным данным.
КОРНЕВОЙ исходный код доступен, таким образом, можно захватить эту реализацию, если Вы хотите.
От документация TSpectrum класса:
алгоритмы, используемые в этом классе, были опубликованы в следующих ссылках:
[1] M.Morhac и др.: Фоновые методы устранения для многомерных спектров гамма-луча совпадения. Ядерные Инструменты и Методы в Физике Исследуют 401 (1997) 113 - 132.
[2] M.Morhac и др.: Эффективный один - и двумерная Золотая развертка и ее приложение к разложению спектров гамма-луча. Ядерные Инструменты и Методы в Физике Исследуют 401 (1997) 385-408.
[3] M.Morhac и др.: Идентификация пиков в многомерных спектрах гамма-луча совпадения. Ядерные Инструменты и Методы в Физике Исследования 443 (2000), 108-125.
бумаги связаны из документации класса для тех из Вас, у кого нет NIM подпиской онлайн.
короткая версия того, что сделано, - то, что гистограмма, сглаженная для устранения шума, и затем локальных максимумов, обнаруживается грубой силой в сглаженной гистограмме.
попробуйте использовать array_flip {переключает ключи с их значениями}, а затем используйте array_intersect () на вашем примере:
$c = array_flip($b); // so you have your original b-array
$intersect = array_intersect($a,c);
Я не на 100% понимаю, что вы хотите. Хотите сравнить значения из $ a с KEYS из $ b?
Есть несколько функций пересечения:
http://php.net/manual/en/function.array-intersect.php http : //www.php.net/manual/en/function.array-intersect-key.php
Но, возможно, вам понадобится:
http://www.php.net/manual/en/function.array -intersect-ukey.php , чтобы вы могли определить свою собственную функцию для сопоставления ключей и / или значений.
Просто вариант ответа Гамбо, должен быть более эффективным, поскольку тесты ключей выполняются непосредственно перед входом в цикл.
$intersection = array_intersect($a, array_keys($b));
$result=array();
foreach ($intersection as $key) {
$result[$k]=$b[$k];
}
Выполните простой foreach
, чтобы перебрать первый массив и получить соответствующие значения из второй массив:
$output = array();
foreach ($a as $key) {
if (array_key_exists($key, $b)) {
$output[$key] = $b[$key];
}
}