каждый () устарел, проблемы, чтобы избавиться от

Я использую сценарий резервного копирования базы данных SQL, в части кода, который я имею:

if (!isset($table_select))
{
$result = $dbc->prepare("show tables");
$i=0;
$table="";
$tables = $dbc->executeGetRows($result);
foreach ($tables as $table_array)
{
list(,$table) = each($table_array);
$exclude_this_table = isset($table_exclude)? in_array($table,$table_exclude) : false;
if(!$exclude_this_table) $table_select[$i]=$table;
$i++;
}
}

Я не знаю, как избавиться от этой части: list(,$table) = each($table_array);

Как each() устарела, кто-нибудь знает решение?
Спасибо вам большое!

-4

Решение

Поскольку вы не используете ключ, который each обеспечивает, это не нужно в этом контексте.

Пример: https://3v4l.org/8vie4

Поскольку массивы передаются путем копирования, а не путем ссылки, вы можете использовать array_shift() в качестве альтернативы, если вы не используете $table_array снова в том же контексте.

foreach ($tables as $table_array) {
$table = array_shift($table_array);
var_dump($table);
}

Имейте в виду, что array_shift извлекает текущее значение и удаляет его из массива.

поскольку each() извлекает текущую пару значений ключа и перемещает указатель на следующее значение, его можно заменить на current() а также next(),

foreach ($tables as $table_array) {
$table = current($table_array);
var_dump($table);
next($table_array);
}

Если вам нужно key текущего значения при использовании current а также next ты можешь использовать key()

foreach ($tables as $table_array) {
$key = key($table_array);
$table = current($table_array);
var_dump($key, $table);
next($table_array);
}

Поскольку используемый сценарий автоматического резервного копирования использует PDO, Вы можете уменьшить сложность, используя fetchAll(PDO::FETCH_COLUMN); вместо executeGetRows Который будет извлекать плоский массив индексированного столбца 0, в отличие от пары ключ-значение столбца.

$result = $dbc->prepare("show tables");
$result->execute();
$i=0;
$table="";
$tables = $result->fetchAll(\PDO::FETCH_COLUMN);
foreach ($tables as $table) {
//...
}
1

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

Вы не хотите делать это в сценарии php. Я настоятельно рекомендую использовать cronjob для этой задачи, насколько это возможно для вас.

Вы можете создать cronjob, используя

crontab -e

И добавить что-то вроде:

0 1 * * * mysqldump -e --user=username --password='password' dbname | gzip | uuencode
sql_backup.gz | mail example@example.com

Приведенный выше пример запускает работу каждый день в 01:00.

Вы можете оформить заказ руководство Вот.

Надеюсь, это поможет! 🙂

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector