Я много думал об этой проблеме и решил, что оптимальное решение должно следовать двум правилам.
Учитывая это и учитывая все причуды PHP, ниже приведено решение I придумал. В отличие от некоторых других ответов, он имеет возможность удалять элементы на основе любого ключа (ов), который вы хотите. Ожидается, что входной массив будет числовым.
$count_array = count($input);
for ($i = 0; $i < $count_array; $i++) {
if (isset($input[$i])) {
for ($j = $i+1; $j < $count_array; $j++) {
if (isset($input[$j])) {
//this is where you do your comparison for dupes
if ($input[$i]['checksum'] == $input[$j]['checksum']) {
unset($input[$j]);
}
}
}
}
}
Единственным недостатком является то, что клавиши не в порядке, когда итерация завершается. Это не проблема, если впоследствии вы используете только петли foreach, но если вам нужно использовать цикл for, вы можете поместить $input = array_values($input);
после этого, чтобы перенумеровать ключи.
Вы говорите: «Я пытался запустить программу как внешнюю программу отладки C ++ DLL ... Но я думаю, что эти параметры могут быть проигнорированы, так как я не могу запустить exe в отладчике ...». Я думаю, что это может быть, где вы идете не так.
Вам нужно установить проект C ++ DLL в качестве запускаемого проекта (щелкните проект правой кнопкой мыши и выберите «Set as StartUp Project»). Затем откройте страницы свойств для проекта и в разделе «Отладка» в поле «Команда» введите полный путь к исполняемому файлу приложения. Введите любые аргументы командной строки, необходимые в поле Command Arguments. Также убедитесь, что ваш проект DLL генерирует PDB в C ++ / General. Очистите и перестройте проект DLL.
Установите точку останова в функции, которую вы ожидаете вызвать - в идеале, где-то рядом с точкой входа, и еще одну точку останова в коде, который вы хотите отладить. Теперь начните отладку (F5). Приложение должно запуститься (точки останова, вероятно, будут выглядеть «выдолбленными» с сообщением о том, что точка останова не привязана или похожа - пока не беспокойтесь об этом). Выполните все действия, необходимые в приложении для вызова собственной библиотеки DLL. Когда DLL и ее PDB загружены, точки останова должны выглядеть непрозрачными и попадать при выполнении строки кода.
Если точка останова не достигнута / не привязана, я бы предложил скопировать C ++ DLL и ее PDB в исполняемую папку приложения, чтобы уменьшить вероятность загрузки неправильной DLL. Затем перезапустите отладчик. Если ваше приложение программно устанавливает рабочую папку, попробуйте скопировать также DLL / PDB в это место.
Если это не удается, это может быть связано с тем, что вызывающий абонент выбирает конфигурацию, несовместимую с вызываемым абонентом. В общем случае не рекомендуется смешивать код режима отладки и выпуска, особенно при сортировке данных. Перестройте библиотеку DLL в режиме выпуска, включая PDB, и выполните приведенные выше инструкции. Все еще возможно отладить код режима релиза, хотя иногда это бывает сложно из-за оптимизаций.