Заставляет preg_grep сохранять и не переупорядочивать ключи массивов после каждого выполнения

Я пытаюсь очистить базу данных электронной почты, которая была импортирована из таблицы Excel. Так что в одной ячейке много плохих персонажей и даже два-три электронных письма. Я не хочу использовать прямое решение для базы данных, как было размещено здесь (T-SQL: проверка формата электронной почты), потому что я сделаю двойную проверку на глаз, прежде чем фактически исключить ее.

1) Сначала я получил все те электронные письма, которые не были в хорошей форме. Затем я преобразовал их в массив. Обратите внимание, что я нахожусь в экосистеме Laravel.

$contato = DB::select("select * from emailstable where outro_email NOT REGEXP '^[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]@[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]\.[a-zA-Z]{2,4}$'");

$email_array = json_decode(json_encode($email_database_as_object), true);

2) Из них я удалил все записи, на которых нет символа @ (пустые, нулевые, случайные фразы), исключив их из исходного массива:

$corretor = preg_grep("/@/i", array_column($email_array, "email"), PREG_GREP_INVERT);

foreach ($corretor as $key => $value) {
$email_array = array_except($email_array, array($key));
}

Но самая большая проблема заключается в том, что когда я пытаюсь удалить плохие символы, preg_grep назначает результирующему массиву новые ключи массива. Вместо того, чтобы сохранить оригинальные.

В качестве примера:
Ключи исходного массива, которые были отфильтрованы: 1,4,10,24,34,65,78 (7 ключей)
Назначенные ключи: 0,1,2,3,4,5,6

В моем коде я пытаюсь извлечь несколько электронных писем, которые были вставлены в одну ячейку, через разделители как «;» , «, ‘и» «, используя preg_grep:

$email_corrected = array(); //array to get all of the corrected emails

$corretor = preg_grep("/;/i", array_column($email_array, "outro_email"));
foreach ($corretor as $key => $value) {
$provisorio = explode(';', $value);
$provisorio  = array_where($provisorio, function($chave, $valor)
{
return strlen($valor) > 0;
}); //laravel function to take out empty results of explode
$provisorio=array_map('trim',$provisorio);
$email_corrected[$key] = $provisorio; //adds the result to corrected emails
$email_array = array_except($email_array, array($key)); // takes out the result from the original array
}$corretor = preg_grep("/,/i", array_column($email_array, "outro_email"));
foreach ($corretor as $key => $value) {
$provisorio = explode(',', $value);
$provisorio  = array_where($provisorio, function($chave, $valor)
{
return strlen($valor) > 0;
});
$provisorio=array_map('trim',$provisorio);
$email_corrected[$key] = $provisorio;
$email_array = array_except($email_array, array($key));
}

$corretor = preg_grep("/\//", array_column($contato_array, "outro_email"));
foreach ($corretor as $key => $value) {
$provisorio = explode(',', $value);
$provisorio  = array_where($provisorio, function($chave, $valor)
{
return strlen($valor) > 0;
});
$provisorio=array_map('trim',$provisorio);
$email_corrected[$key] = $provisorio;
$email_array = array_except($email_array, array($key));
}

Но после каждого preg_grep ключи из $ corretor не совпадают с исходными ключами из $ email_array. В результате я не удаляю правильные ключи из исходного массива при выполнении $ email_array = array_except ($ email_array, array ($ key));

Заранее спасибо.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]