PHP
- 336 ответов
- 0 вопросов
255
Вклад в тег
$mail->isSMTP(); //Send using SMTP
$mail->Host = 'smtp.example.com'; //Set the SMTP server to send through
$mail->SMTPAuth = true; //Enable SMTP authentication
$mail->Username = 'user@example.com'; //SMTP username
$mail->Password = 'secret'; //SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; //Enable implicit TLS encryption
$mail->Port = 465; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
Как должна выглядеть функция, чтоб рекурсия происходила внутри функции, а не на саму функцию.
function parents($tree, $childKey) {
$parents = [];
$endOfTree = false;
$minLevel = 1;
$currentLevel = 1;
$parentBranches = [];
$branch = $tree;
$branchKey = key($branch);
$branchValue = current($branch);
while (!$endOfTree) {
// Обработка текущего элемента
if (strpos($childKey, $branchKey . ".") === 0 && $branchKey !== $childKey) {
$parents[] = (string)$branchKey;
}
// Переключение ветки на внутренни уровень, если он есть
if (is_array($branchValue) && !empty($branchValue)) {
$currentLevel++;
$parentBranches[] = $branch;
$branch = $branchValue;
$branchKey = key($branch);
$branchValue = current($branchValue);
continue;
}
// Переключение на следующий элемент
$branchValue = next($branch);
$branchKey = key($branch);
// В случае, если следующего элемента нет, возврат на уровень выше или завершение цикла
if ($branchValue === false) {
$branch = array_pop($parentBranches);
$currentLevel--;
// Возврат на уровень выше, если это возможно
if ($currentLevel >= $minLevel) {
$branchValue = next($branch);
$branchKey = key($branch);
// Завершение цикла, если уровень минимальный
} else {
$endOfTree = true;
}
}
}
// Смена направления массива и возвращение результата
return array_reverse($parents);
}
// Проверка
parents($tree, '1.3.2.2');
/*
array(3) {
[0]=>
string(5) "1.3.2"
[1]=>
string(3) "1.3"
[2]=>
string(1) "1"
}
*/
SELECT
SUM(CASE WHEN `last_sign_in_at` <= DATE_SUB(NOW(), INTERVAL 3 DAY) THEN 1 ELSE 0 END) AS '> 3 days',
SUM(CASE WHEN `last_sign_in_at` <= DATE_SUB(NOW(), INTERVAL 90 MINUTE) AND `last_sign_in_at` >= DATE_SUB(NOW(), INTERVAL 3 DAY) THEN 1 ELSE 0 END) AS '> 90 min',
SUM(CASE WHEN `last_sign_in_at` <= DATE_SUB(NOW(), INTERVAL 30 MINUTE) AND `last_sign_in_at` >= DATE_SUB(NOW(), INTERVAL 90 MINUTE) THEN 1 ELSE 0 END) AS '> 30 min'
FROM `table`
SELECT *
FROM `table`
WHERE 1
AND FIND_IN_SET('1', `field`) > 0
AND FIND_IN_SET('2', `field`) = 0
SELECT *
FROM `table`
WHERE (
(`field` LIKE '1,%' OR `field` LIKE '%,1,%' OR `field` LIKE '%,1') AND
(`field` NOT LIKE '2,%' AND `field` NOT LIKE '%,2,%' AND `field` NOT LIKE '%,2')
)
function groupBy(array $elements, callable $getUniqueKey) {
$grouped = [];
foreach ($elements as $element) {
$uniqueKey = $getUniqueKey($element);
$grouped[$uniqueKey][] = $element;
}
return $grouped;
}
$groupedByDate = groupBy($app, function($event) {
return date("Y-m-d", strtotime($event['created_at']));
});