Функции массивов Albireo CMS
Функция arrayСondition
Формирует строку из массива с условным включением элементов, идеально подходит для генерации классов и стилей.
Сигнатура
function arrayСondition(array $array, string $delimiter = ' '): string
Аргументы
- array
$array - Массив где:
- Элементы с числовыми ключами добавляются всегда
- Элементы со строковыми ключами добавляются только если значение === true
- string
$delimiter - Разделитель между элементами (по умолчанию пробел)
Возвращаемое значение
Строка с объединенными элементами согласно условиям.
Примеры использования
// Генерация классов
$classes = [
'btn',
'btn-primary' => $isPrimary,
'btn-large' => $isLarge,
'disabled' => $isDisabled
];
echo 'class="' . arrayСondition($classes) . '"';
// Генерация стилей
$styles = [
'color: red' => $isError,
'font-weight: bold' => true,
'display: none' => $isHidden
];
echo 'style="'.arrayСondition($styles, '; ').'"';
// Простой список
$items = ['one', 'two' => false, 'three' => true];
echo arrayСondition($items, ', '); // 'one, three'
При использовании в tpl-шаблонизаторе:
class="{{ arrayСondition(['t-bold' => $loopOdd, 't-red' => true]) }}"
style="{{ arrayСondition(['margin: 20px' => $loopOdd, 'padding: 10px' => true], ';') }}"
Примечания
- Для числовых ключей всегда использует значение
- Для строковых ключей использует ключ только если значение === true
- Идеально подходит для:
- Динамических классов CSS
- Условных inline-стилей
- Формирования строк с условиями
- Безопасно обрабатывает все типы данных
- Оптимизированная реализация через
implode()
Функция arrayFindPrevNext
Находит предыдущий и следующий элементы в массиве относительно указанного значения.
Сигнатура
function arrayFindPrevNext(array $array, mixed $value, string $findKey): array
Аргументы
- array
$array - Исходный массив с числовой индексацией (0,1,2...), в котором производится поиск
- mixed
$value - Значение для поиска в указанном ключе элементов массива
- string
$findKey - Ключ в элементах массива, в котором нужно искать указанное значение
Результат
Возвращает ассоциативный массив с двумя элементами:
- prev - предыдущий элемент или пустой массив, если текущий элемент первый
- next - следующий элемент или пустой массив, если текущий элемент последний
Примеры использования
// Навигация между статьями
$articles = [
['id' => 101, 'title' => 'Article 1'],
['id' => 102, 'title' => 'Article 2'],
['id' => 103, 'title' => 'Article 3']
];
$nav = arrayFindPrevNext($articles, 102, 'id');
// $nav содержит:
// [
// 'prev' => ['id' => 101, 'title' => 'Article 1'],
// 'next' => ['id' => 103, 'title' => 'Article 3']
// ]
// Пример с отсутствующим значением
$nav = arrayFindPrevNext($articles, 999, 'id');
// Возвращает: ['prev' => [], 'next' => []]
Примечания
- Массив должен иметь последовательную числовую индексацию (0,1,2...)
- Сравнение значений выполняется строго (===)
- Если значение не найдено, возвращаются пустые массивы для prev и next
- Функция прекращает поиск после первого совпадения
Функция arrayFormat
Преобразует массив ассоциативных массивов в строку по заданному шаблону.
Сигнатура
function arrayFormat(array $array, string $format = '<a class="%icon%" href="%url%">%name%</a>', string $before = '', string $after = ''): string
Аргументы
- array
$array - Массив элементов, где каждый элемент - ассоциативный массив с данными
- string
$format - Шаблон строки с плейсхолдерами в формате
%ключ%. По умолчанию:'<a class="%icon%" href="%url%">%name%</a>' - string
$before - Текст, добавляемый перед объединенным результатом (по умолчанию пустая строка)
- string
$after - Текст, добавляемый после объединенного результата (по умолчанию пустая строка)
Результат
Возвращает строку, состоящую из:
- Содержимого
$before - Всех элементов массива, отформатированных по шаблону
- Содержимого
$after
Если массив пуст, возвращает пустую строку.
Примеры использования
// Форматирование навигационного меню
$menuItems = [
['title' => 'Home', 'link' => '/', '_before' => '<li>', '_after' => '</li>'],
['title' => 'Products', 'link' => '/products', '_before' => '<li>', '_after' => '</li>']
];
echo arrayFormat($menuItems, '<a href="%link%">%title%</a>', '<ul>', '</ul>');
// Вывод: <ul><li><a href="/">Home</a></li><li><a href="/products">Products</a></li></ul>
// Форматирование карточек товаров
$products = [
['name' => 'Product 1', 'price' => '10.99', 'sku' => 'P001'],
['name' => 'Product 2', 'price' => '15.99', 'sku' => 'P002']
];
echo arrayFormat($products, '<div class="product"><h3>%name%</h3><p>Price: %price%</p></div>');
Примечания
- Специальные ключи
_beforeи_afterдобавляют текст вокруг каждого элемента - Плейсхолдеры в формате
%ключ%заменяются на соответствующие значения - Если ключ не найден в элементе, плейсхолдер остается без изменений
- Функция эффективна для генерации HTML-кода из данных массива
Функция arrayNatSort
Рекурсивно сортирует массив с сохранением ключей, используя натуральную сортировку.
Сигнатура
function arrayNatSort(array &$array): void
Аргументы
- array
&$array - Ссылка на массив для сортировки. Массив сортируется in-place (изменяется переданный массив).
Примеры использования
// Сортировка файловой структуры
$filesystem = [
'docs' => ['chapter2.md' => '', 'chapter1.md' => ''],
'images' => [],
'README.md' => ''
];
arrayNatSort($filesystem);
// Результат:
// [
// 'README.md' => '',
// 'docs' => ['chapter1.md' => '', 'chapter2.md' => ''],
// 'images' => []
// ]
// Сортировка сложной структуры
$data = [
'Zebra' => 1,
'apple' => 2,
'Banana' => ['yellow' => 1, 'Green' => 2],
'123' => 3,
'45' => 4
];
arrayNatSort($data);
// Результат:
// [
// '45' => 4,
// '123' => 3,
// 'apple' => 2,
// 'Banana' => ['Green' => 2, 'yellow' => 1],
// 'Zebra' => 1
// ]
Примечания
- Функция изменяет исходный массив (работает по ссылке)
- Натуральная сортировка учитывает числовые значения в строках
- Сортировка регистронезависимая (используется strnatcasecmp)
- Подходит для сортировки файловых структур, меню, древовидных данных
- Для простых массивов без вложенности можно использовать natcasesort()
Функция arrayPagination
Формирует данные для пагинации массива и возвращает часть элементов для текущей страницы.
Сигнатура
function arrayPagination(array $array, int $limit): array
Аргументы
- array
$array - Исходный массив данных для разбиения на страницы
- int
$limit - Количество элементов на одной странице (должно быть ≥1)
Возвращаемое значение
Ассоциативный массив со следующими ключами:
- records - общее количество элементов
- limit - элементов на страницу
- max - всего страниц
- current - текущая страница
- prev/next - номера предыдущей/следующей страницы (0 если нет)
- prevLink/nextLink - URL для навигации
- offset - смещение для текущей страницы
- outRange - флаг выхода запрошенной страницы за пределы
- urlFull - базовый URL без параметров пагинации
- pagLinks - массив ссылок для отображения пагинации
- files - элементы для текущей страницы
Примеры использования
// Пример с массивом данных
$products = [...]; // массив товаров
$perPage = 12;
$pageData = arrayPagination($products, $perPage);
// Использование в шаблоне
foreach ($pageData['files'] as $product) {
// вывод товара
}
// Вывод пагинации
if ($pageData['max'] > 1) {
echo '<div class="pagination">';
if ($pageData['prev']) {
echo '<a href="'.$pageData['prevLink'].'">Предыдущая</a>';
}
// ... вывод номеров страниц
if ($pageData['next']) {
echo '<a href="'.$pageData['nextLink'].'">Следующая</a>';
}
echo '</div>';
}
Функция arrayReplaceKeys
Рекурсивно заменяет подстроки в ключах многомерного массива аналогично str_replace().
Сигнатура
function arrayReplaceKeys(array $array, string|array $search, string|array $replace): array
Аргументы
- array
$array - Исходный массив для обработки. Может быть многомерным.
- string|array
$search - Искомая подстрока или массив подстрок для поиска в ключах
- string|array
$replace - Строка или массив замены (аналогично параметру
replaceвstr_replace)
Возвращаемое значение
Новый массив с обновленными ключами, сохраняющий исходную структуру и значения.
Примеры использования
// Простая замена подстроки в ключах
$data = ['user_name' => 'John', 'user_age' => 30];
$result = arrayReplaceKeys($data, 'user_', '');
// Результат: ['name' => 'John', 'age' => 30]
// Множественная замена
$data = ['tmp_file' => 'a.txt', 'tmp_dir' => '/path'];
$result = arrayReplaceKeys($data, ['tmp_', 'file'], ['', 'document']);
// Результат: ['document' => 'a.txt', 'tmp_dir' => '/path']
// Рекурсивная обработка
$data = [
'old_key' => 'value',
'nested' => [
'old_key' => 'nested_value',
'other' => 123
]
];
$result = arrayReplaceKeys($data, 'old_', 'new_');
// Результат: [
// 'new_key' => 'value',
// 'nested' => [
// 'new_key' => 'nested_value',
// 'other' => 123
// ]
// ]
Функция arraySearchKeys
Ищет в массиве все элементы, у которых указанный ключ имеет заданное значение, и возвращает их ключи.
Сигнатура
function arraySearchKeys(array $array, mixed $key, mixed $value): array
Аргументы
- array
$array - Многомерный ассоциативный массив, в котором производится поиск. Может быть как числовым, так и ассоциативным массивом верхнего уровня.
- mixed
$key - Ключ в элементах массива, по которому осуществляется поиск. Может быть строкой (для ассоциативных массивов) или integer (для числовых индексов).
- mixed
$value - Значение для сравнения. Сравнение выполняется строго (оператор ===).
Примеры использования
$data = [
'first' => ['role' => 'admin', 'name' => 'Alice'],
'second' => ['role' => 'user', 'name' => 'Bob'],
'third' => ['role' => 'admin', 'name' => 'Charlie']
];
// Поиск всех администраторов
$admins = arraySearchKeys($data, 'role', 'admin'); // ['first', 'third']
// Поиск по несуществующему ключу
$empty = arraySearchKeys($data, 'status', 'active'); // []
Функция arraySortKeys
Сортирует ассоциативный массив по указанному порядку ключей.
Сигнатура
function arraySortKeys(array $array, array $sortKeys): array
Аргументы
- array
$array - Исходный ассоциативный массив для сортировки
- array
$sortKeys - Массив ключей в порядке, в котором они должны появиться в результате
Возвращаемое значение
Новый массив с элементами, упорядоченными согласно списку ключей.
Примеры использования
// Простая сортировка ключей
$data = ['z' => 1, 'x' => 2, 'y' => 3];
$result = arraySortKeys($data, ['x', 'y', 'z']);
// Результат: ['x' => 2, 'y' => 3, 'z' => 1]
// Сортировка с неполным списком ключей
$data = ['title' => 'Test', 'date' => '2023-01-01', 'author' => 'John'];
$result = arraySortKeys($data, ['date', 'title']);
// Результат: ['date' => '2023-01-01', 'title' => 'Test', 'author' => 'John']
// Работа с вложенными структурами
$error = [
'message' => 'Error',
'code' => 500,
'details' => ['file' => 'app.php', 'line' => 10]
];
$result = arraySortKeys($error, ['code', 'message', 'details']);
// Сохраняет структуру, меняет только порядок ключей верхнего уровня
Примечания
- Сохраняет все элементы исходного массива
- Ключи, не указанные в
$sortKeys, остаются в исходном порядке в конце массива - Если ключ из
$sortKeysотсутствует в массиве, он игнорируется - Не изменяет порядок элементов вложенных массивов
- Полезен для:
- Унификации порядка ключей в API ответах
- Подготовки данных для вывода
- Стандартизации структуры массивов
Функция arrayToStrHTML
Преобразует массив в HTML-строку с автоматическим экранированием спецсимволов.
Сигнатура
function arrayToStrHTML(
array $array,
string $start = '<ul>',
string $end = '</ul>',
string $before = '<li>',
string $after = '</li>'
): string
Аргументы
- array
$array - Одномерный массив значений для преобразования
- string
$start - HTML-обертка начала списка (по умолчанию
<ul>) - string
$end - HTML-обертка конца списка (по умолчанию
</ul>) - string
$before - Текст/теги перед каждым элементом (по умолчанию
<li>) - string
$after - Текст/теги после каждого элемента (по умолчанию
</li>)
Возвращаемое значение
Строка HTML с экранированными значениями массива в указанной структуре.
Примеры использования
// Базовый пример списка $fruits = ['Apple', 'Banana', 'Orange']; echo arrayToStrHTML($fruits); // <ul><li>Apple</li><li>Banana</li><li>Orange</li></ul> // Кастомная обертка $menuItems = ['Home', 'Products', 'Contacts']; echo arrayToStrHTML($menuItems, '<div class="menu"><ul>', '</ul></div>', '<li class="item">', '</li>'); // Обработка пользовательского ввода $comments = ['Hello!', '<script>alert(1)</script>', 'Good >> bad']; echo arrayToStrHTML($comments); // Спецсимволы будут корректно экранированы
Примечания
- Автоматически экранирует спецсимволы через
htmlspecialchars() - Работает только с одномерными массивами
- Идеально подходит для:
- Генерации HTML-меню
- Вывода списков
- Обработки пользовательского ввода
- Создания структурированных данных
Функция arrayValidate
Функция arrayValidate представляет собой комплексный инструмент для валидации данных, как правило, получаемых из пользовательских форм. Она проверяет массив данных на соответствие набору предопределенных правил, собирает все сообщения об ошибках и возвращает как очищенные данные, так и список ошибок.
См. Работа с формами в Albireo CMS.
Примеры см. в pages/spacific/demo.
Сигнатура
function arrayValidate(array $array, array $rules): array
Аргументы
- array
$array - Ассоциативный массив с данными для проверки, например,
$_POST. - array
$rules - Массив, описывающий правила валидации. Ключи этого массива должны соответствовать ключам в
$array. Значение для каждого ключа — это ассоциативный массив правил, где ключ — имя правила, а значение — его параметры.
Результат
Возвращает ассоциативный массив (array) с двумя ключами:
'data': Исходный массив$array, который может быть модифицирован (например, добавлены значения по умолчанию или применены функции очистки вродеtrim).'errors': Массив строк, содержащий все сообщения об ошибках, сгенерированные в процессе валидации. Если ошибок нет, массив будет пустым.
Список правил валидации
default- Устанавливает значение по умолчанию, если поле отсутствует в исходных данных.
required- Поле не может быть пустым.
email- Проверяет, является ли значение корректным email-адресом.
url- Проверяет, является ли значение корректным и безопасным URL-адресом.
min_length/max_length- Проверяет минимальную/максимальную длину строки.
in_list- Проверяет, входит ли значение в указанный список допустимых значений.
start_with- Проверяет, начинается ли строка с указанной подстроки.
equals- Проверяет, равно ли значение указанному.
ip- Проверяет, является ли значение корректным IP-адресом.
numeric/numeric_int- Проверяет, является ли значение числом / целым числом.
numeric_positive/numeric_negative- Проверяет, является ли число положительным (>= 0) / отрицательным (< 0).
numeric_min/numeric_max- Проверяет, находится ли число в допустимом диапазоне.
date- Проверяет, соответствует ли строка формату даты 'Y-m-d'. Если строка пустая, то она не проверяется.
time- Проверяет, соответствует ли строка формату времени 'H:i'. Если строка пустая, то она не проверяется.
datetime_sql- Проверяет, соответствует ли строка формату времени 'Y-m-d H:i:s'. Если строка пустая, то она не проверяется.
chars_forbidden- Проверяет на отсутствие запрещенных символов.
chars_allow- Проверяет, что строка состоит только из разрешенных символов.
chars_normal- Проверяет, что строка состоит из букв, цифр и опционально разрешенных символов.
base64- Проверяет, является ли строка валидной Base64-строкой.
stop_words- Проверяет на наличие стоп-слов.
Правила предобработки
val_trim- Применяет
trim()к значению перед валидацией. val_strip_tags- Применяет
strip_tags()к значению перед валидацией.
Примеры использования
Пример: Валидация формы регистрации
$formData = [
'login' => ' user123 ',
'email' => 'invalid-email',
'password' => '123',
'password_confirm' => '1234',
'agreement' => null,
'user_type' => 'guest',
];
$rules = [
'login' => [
'val_trim' => true,
'required' => true,
'min_length' => 4,
'chars_normal' => '', // разрешены только буквы и цифры
],
'email' => [
'required' => ['error' => 'Поле Email обязательно для заполнения.'],
'email' => ['error' => 'Пожалуйста, введите корректный Email.'],
],
'password' => [
'required' => true,
'min_length' => ['options' => 6, 'error' => 'Пароль должен быть не менее 6 символов.'],
],
'password_confirm' => [
'required' => true,
'equals' => ['options' => $formData['password'], 'error' => 'Пароли не совпадают.'],
],
'agreement' => [
'required' => ['error' => 'Вы должны принять условия соглашения.'],
],
'user_type' => [
'default' => 'user',
'in_list' => ['options' => ['user', 'moderator', 'admin']],
],
];
$validationResult = arrayValidate($formData, $rules);
if ($validationResult['errors']) {
// Если есть ошибки, выводим их
echo '<ul>';
foreach ($validationResult['errors'] as $error) {
echo '<li>' . htmlspecialchars($error) . '</li>';
}
echo '<ul>';
} else {
// Ошибок нет, можно работать с очищенными данными
echo 'Валидация прошла успешно!';
// print_r($validationResult['data']);
}
Примечания
- Кастомные сообщения об ошибках: Для каждого правила можно задать собственное сообщение об ошибке через ключ
'error'.
Функция checkArrVal
Проверяет значение элемента массива с особыми условиями, удобна для работы с флагами и настройками.
Сигнатура
function checkArrVal(array $array, string $key, bool $default = false): bool
Аргументы
- array
$array - Массив для проверки значений
- string
$key - Ключ элемента массива для проверки
- bool
$default - Значение по умолчанию, если ключ отсутствует (по умолчанию false)
Возвращаемое значение
Результат проверки согласно правилам:
- false - если ключ отсутствует (возвращается $default)
- false - если значение равно 0, '0', '-' или 'false'
- true - во всех остальных случаях
Примеры использования
// Проверка настроек
$config = [
'debug' => 1,
'caching' => 'false',
'logging' => '-'
];
$isDebug = checkArrVal($config, 'debug'); // true
$isCaching = checkArrVal($config, 'caching'); // false
$isLogging = checkArrVal($config, 'logging'); // false
$isFeature = checkArrVal($config, 'new_feature', true); // true (значение по умолчанию)
// Использование в условиях
if (checkArrVal($options, 'expand_menu')) {
// Показывать расширенное меню
}
Примечания
- Использует функцию
checkStr()для проверки значений - Чувствителен к регистру при проверке строк
'false' - Не изменяет исходный массив
- Полезен для:
- Проверки флагов в конфигурациях
- Обработки параметров запросов
- Работы с настройками пользователей
Функция choiceKey
Выбирает первое существующее значение из массива по переданным ключам.
Сигнатура
function choiceKey(array $array, mixed ...$keys): mixed
Аргументы
- array
$array - Ассоциативный массив, в котором производится поиск значений
- mixed
...$keys - Перечень ключей для проверки (один или несколько). Ключи проверяются в порядке передачи.
Результат
Возвращает значение первого найденного ключа (тип mixed) или null, если ни один из ключей не существует в массиве.
Примеры использования
// Пример с приоритетом ключей $page = ['meta_title' => 'О компании', 'title' => 'Компания']; $title = choiceKey($page, 'meta_title', 'title', 'slug') ?? 'Без названия'; // 'О компании' // Пример с настройками $settings = ['color' => 'blue']; $theme = choiceKey($settings, 'theme', 'color'); // 'blue' // Пример с обработкой отсутствия ключей $data = ['id' => 123]; $value = choiceKey($data, 'name', 'email'); // null
Примечания
- Ключи проверяются в порядке их передачи в функцию
- Для установки значения по умолчанию рекомендуется использовать оператор
?? - Функция не рекурсивна - работает только с массивом верхнего уровня
Функция searchInArray
Фильтрует многомерный массив по наличию ключа и/или его значению.
Сигнатура
function searchInArray(array $array, string $key, mixed $value = null): array
Аргументы
- array
$array - Многомерный ассоциативный массив для поиска
- string
$key - Ключ, по которому осуществляется поиск
- mixed
$value - Значение для сравнения:
- null - проверяется только наличие ключа
- любое другое значение - строгое сравнение (===)
Возвращаемое значение
Новый массив, содержащий только элементы, удовлетворяющие условиям поиска.
Примеры использования
// Данные для примеров
$users = [
['id' => 1, 'name' => 'John', 'role' => 'admin'],
['id' => 2, 'name' => 'Jane'],
['id' => 3, 'name' => 'Bob', 'role' => 'user']
];
// Поиск всех пользователей с ролью
$withRole = searchInArray($users, 'role');
// Результат: элементы John и Bob
// Поиск администраторов
$admins = searchInArray($users, 'role', 'admin');
// Результат: только John
// Поиск несуществующего значения
$empty = searchInArray($users, 'role', 'guest');
// Результат: пустой массив
Примечания
- Использует строгое сравнение (===) при указании значения
- Сохраняет оригинальные ключи массива
- Не рекурсивна - проверяет только первый уровень вложенности
- Эффективна для:
- Фильтрации конфигураций
- Поиска элементов по флагам
- Выборки данных по категориям/типам
Функция sortArray
Универсальная функция для сортировки многомерных ассоциативных массивов по различным алгоритмам.
Сигнатура
function sortArray(array $array, string $field, string $algorithm): array
Аргументы
- array
$array - Исходный массив для сортировки. Может быть как ассоциативным, так и числовым.
- string
$field - Поле в элементах массива, по которому выполняется сортировка.
- string
$algorithm - Алгоритм сортировки:
- number-asc/desc - числовая сортировка
- date-asc/desc - сортировка по дате
- string-asc/desc - строковая сортировка (natural order)
- rand - случайное перемешивание
Результат
Возвращает отсортированную копию исходного массива с сохранением ключей.
Примеры использования
// Сортировка страниц по полю order $pages = getPages(); $sortedPages = sortArray($pages, 'order', 'number-asc'); // Сортировка новостей по дате (новые сверху) $news = getNews(); $sortedNews = sortArray($news, 'date', 'date-desc'); // Случайное перемешивание элементов $randomOrder = sortArray($products, '', 'rand');
Примечания
- Для дат используется преобразование через
strtotime() - Строковая сортировка выполняется с учетом natural order (
strnatcasecmp) - Элементы без указанного поля помещаются в конец массива
- Функция сохраняет ключи массива
- Для случайной сортировки поле
$fieldигнорируется