Příklady použití Array funkcí
Praktické příklady ze skutečného kódu aplikace.
getArrayValue() – Bezpečný přístup k nastavení
Načítání SMTP konfigurace
Aplikace používá getArrayValue() k bezpečnému čtení vnořeného nastavení:
// core/Email/Mailer.php
use function Petrovo\Array\getArrayValue;
// Kontrola, zda je SMTP zapnutý
if (getArrayValue(SETTING, 'smtp:use')) {
$host = getArrayValue(SETTING, 'smtp:host');
$port = getArrayValue(SETTING, 'smtp:port');
$user = getArrayValue(SETTING, 'smtp:user');
$password = getArrayValue(SETTING, 'smtp:password');
// Konfiguruj SMTP...
}
Výhody:
- Bez chyby
Undefined array keypři chybějícím nastavení - Čitelný kód – vidíš strukturu přímo v klíči
- Vrací
nullmísto varovací chyby
SEO metadata z nastavení
// app/tags/seo/metadata.php
use function Petrovo\Array\getArrayValue;
// Čtení SEO titulků s fallback na NULL
$prefix = getArrayValue(SETTING, 'metadata:title:prefix_' . LANG);
$title = $prefix ? $prefix . ' | ' . $pageTitle : $pageTitle;
// Čtení OG meta tagů
$ogTitle = getArrayValue(SETTING, 'metadata:og:title', true);
$ogImage = getArrayValue(SETTING, 'metadata:og:image', true);
$ogCreator = getArrayValue(SETTING, 'metadata:og:creator', true);
// Pokud je $emptyIsNull = true, vrací null pro prázdné hodnoty
E-mail konrfigurace s fallback
// app/tags/newsletter/add-email/_email.php
use function Petrovo\Array\getArrayValue;
$from = getArrayValue(SETTING, 'email:from', true); // true = vrátí null pro prázdné
$contact = getArrayValue(SETTING, 'email:contact');
$sender = $from ?? $contact ?? 'noreply@example.com';
// Bezpečné použití s fallback
$reply_to = getArrayValue(SETTING, 'email:reply_to', false) ?? $sender;
setArrayValue() – Budování vnořených struktur
Dynamické načítání nastavení
// app/DATA/Setting/load.php
use function Petrovo\Array\setArrayValue;
$output = array_reduce($dbSettings, function ($carry, $item) {
// Každý řádek z DB má 'parameter' (např. 'smtp:use')
// Funkce vytvoří vnořenou strukturu automaticky
setArrayValue($carry, $item->parameter, $item->value);
return $carry;
}, []);
// Výsledek: $output je vnořené pole se všemi nastavenímí
// [
// 'smtp' => [
// 'use' => '1',
// 'host' => 'smtp.example.com',
// 'port' => '587'
// ],
// 'email' => [
// 'from' => 'app@example.com'
// ]
// ]
Session správa
// core/Session/Session.php
use function Petrovo\Array\setArrayValue;
// Uložení dat do session s vnořenou cestou
setArrayValue($_SESSION, 'user:id', $userId);
setArrayValue($_SESSION, 'user:name', $userName);
setArrayValue($_SESSION, 'user:permissions:admin', true);
setArrayValue($_SESSION, 'user:permissions:editor', false);
// Session je automaticky vnořená
// $_SESSION['user']['id'] = $userId
// $_SESSION['user']['permissions']['admin'] = true
deleteArrayValue() – Čištění session
// core/Session/Session.php
use function Petrovo\Array\deleteArrayValue;
// Smaž konkrétní session data
deleteArrayValue($_SESSION, 'user:temp_data');
deleteArrayValue($_SESSION, 'notification:pending');
// Bezpečné – pokud klíč neexistuje, nic se nestane
deleteArrayValue($_SESSION, 'nonexistent:key');
Logout – vyčištění uživatelských dat
// Příklad logout procedury
$_SESSION['user'] = []; // nebo explicitní smazání:
deleteArrayValue($_SESSION, 'user:id');
deleteArrayValue($_SESSION, 'user:name');
deleteArrayValue($_SESSION, 'user:permissions');
removePrefixFromFieldKeys() – Normalizace formulářových dat
Čištění POST v admin panelu
// app/Controllers/ADMIN/admin.php
use function Petrovo\Array\removePrefixFromFieldKeys;
// HTML formulář obsahuje:
// <input name="f_name">
// <input name="f_email">
// <input name="f_active">
// POST data se vrací s prefixem
// $_POST = ['f_name' => 'John', 'f_email' => 'john@example.com', ...]
// Normalizuj klíče (výchozí prefix 'f_')
$_POST = removePrefixFromFieldKeys($_POST);
// Teď máš čisté klíče
// $_POST = ['name' => 'John', 'email' => 'john@example.com', ...]
// Můžeš přímo pracovat bez prefixu
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
Vlastní prefix
// Pokud formulář používá jiný prefix
// HTML: <input name="input_name"> <input name="input_email">
// $_POST = ['input_name' => 'John', 'input_email' => 'john@example.com']
// Normalizuj s vlastním prefixem
$_POST = removePrefixFromFieldKeys($_POST, 'input_');
// Výsledek: ['name' => 'John', 'email' => 'john@example.com']
Čištění FILE uploadů
// app/Controllers/ADMIN/admin.php
// HTML formulář:
// <input type="file" name="f_avatar">
// <input type="file" name="f_documents">
// Normalizuj přijaté soubory
$_FILES = removePrefixFromFieldKeys($_FILES);
// Teď máš: $_FILES['avatar'], $_FILES['documents']
$avatar = $_FILES['avatar'] ?? null;
Čištění Cube dat
// app/Middlewares/Input/adminCubeDataMiddleware.php
use function Petrovo\Array\removePrefixFromFieldKeys;
// POST data z cube editoru obsahují f_ prefix
$_POST = removePrefixFromFieldKeys($_POST);
// Čisté formátování pro DB uložení
$cubeData = $_POST; // 'title', 'description', 'image', ...
flattenArray() – Zploštění pro transport
Transformace pro API
use function Petrovo\Array\flattenArray;
$userProfile = [
'personal' => [
'name' => 'John Doe',
'email' => 'john@example.com'
],
'settings' => [
'notifications' => true,
'theme' => 'dark'
]
];
$flat = flattenArray($userProfile);
// Výsledek pro API response:
// [
// 'personal:name' => 'John Doe',
// 'personal:email' => 'john@example.com',
// 'settings:notifications' => true,
// 'settings:theme' => 'dark'
// ]
Transformace pro formulář s jedno-klíčovými vstupy
use function Petrovo\Array\flattenArray;
$config = [
'database' => [
'host' => 'localhost',
'port' => 3306,
'name' => 'myapp'
],
'cache' => [
'enabled' => true,
'ttl' => 3600
]
];
$flat = flattenArray($config);
// HTML formulář s jednorádkovými inputy:
// <input name="database:host" value="localhost">
// <input name="database:port" value="3306">
// <input name="cache:ttl" value="3600">
Vlastní oddělovač
use function Petrovo\Array\flattenArray;
// Zploštění s tečkami místo dvojtečky
$flat = flattenArray($userProfile, '.');
// Výsledek:
// [
// 'personal.name' => 'John Doe',
// 'personal.email' => 'john@example.com',
// 'settings.notifications' => true
// ]
unflattenArray() – Rozvinování struktury
Zpět z API na vnořené data
use function Petrovo\Array\unflattenArray;
// Obdržení zploštěných dat z API/formuláře
$flatData = [
'user:id' => 123,
'user:name' => 'John',
'user:email' => 'john@example.com',
'address:city' => 'Prague',
'address:zip' => '12000'
];
// Rozvinutí zpět na vnořenou strukturu
$user = unflattenArray($flatData);
// Výsledek:
// [
// 'user' => [
// 'id' => 123,
// 'name' => 'John',
// 'email' => 'john@example.com'
// ],
// 'address' => [
// 'city' => 'Prague',
// 'zip' => '12000'
// ]
// ]
Reversibilita – úplná transformace
use function Petrovo\Array\flattenArray;
use function Petrovo\Array\unflattenArray;
$original = [
'settings' => [
'email' => [
'smtp' => 'localhost',
'port' => 587
],
'theme' => 'dark'
]
];
// Zploštění
$flat = flattenArray($original);
// Uložení/přenos v nějaké formě...
// Rozvinutí zpět
$restored = unflattenArray($flat);
// $restored === $original (true)
Kombinované scénáře
Formulářový workflow
use function Petrovo\Array\removePrefixFromFieldKeys;
use function Petrovo\Array\flattenArray;
use function Petrovo\Array\setArrayValue;
// 1. HTML formulář s f_ prefixem
// <input name="f_user:name">
// <input name="f_user:email">
// 2. Očisti prefix
$cleaned = removePrefixFromFieldKeys($_POST);
// ['user:name' => 'John', 'user:email' => 'john@example.com']
// 3. Rozviň na strukturu
use function Petrovo\Array\unflattenArray;
$data = unflattenArray($cleaned);
// ['user' => ['name' => 'John', 'email' => 'john@example.com']]
// 4. Uložení do DB
DB::query("INSERT INTO users SET data = ?", [json_encode($data)]);
Session s vnořenými daty
use function Petrovo\Array\setArrayValue;
use function Petrovo\Array\getArrayValue;
use function Petrovo\Array\deleteArrayValue;
// 1. Přihlášení uživatele
setArrayValue($_SESSION, 'user:id', 42);
setArrayValue($_SESSION, 'user:name', 'John');
setArrayValue($_SESSION, 'user:roles:admin', true);
// 2. Čtení dat
$userId = getArrayValue($_SESSION, 'user:id');
$isAdmin = getArrayValue($_SESSION, 'user:roles:admin');
// 3. Odhlášení
deleteArrayValue($_SESSION, 'user:id');
deleteArrayValue($_SESSION, 'user:name');
deleteArrayValue($_SESSION, 'user:roles');
Best Practices
Správně – Bezpečný přístup
use function Petrovo\Array\getArrayValue;
// Vrací null pro chybějící klíč
$value = getArrayValue(SETTING, 'some:nested:key', false);
if ($value !== null) {
// Bezpečný kód
}
Špatně – Přímý přístup
// Varování: Undefined array key
$value = SETTING['some']['nested']['key'];
Správně – Normalizace formulářů
use function Petrovo\Array\removePrefixFromFieldKeys;
$data = removePrefixFromFieldKeys($_POST);
Špatně – Ruční prefix removal
// Zbytečné a náchylné na chyby
foreach ($_POST as $key => $value) {
if (str_starts_with($key, 'f_')) {
$clean_key = substr($key, 2);
$clean[$clean_key] = $value;
}
}
Správně – Kombinace operací
use function Petrovo\Array\setArrayValue;
use function Petrovo\Array\getArrayValue;
$config = [];
setArrayValue($config, 'db:host', 'localhost');
setArrayValue($config, 'db:port', 3306);
$host = getArrayValue($config, 'db:host');
Debugging tipy
Inspekce vnořené struktury
use function Petrovo\Array\flattenArray;
$nested = [
'user' => [
'profile' => ['name' => 'John']
]
];
// Zploštění pro snadný debug výstup
$flat = flattenArray($nested);
// Nyní je snadnější vidět všechny klíče:
// 'user:profile:name' => 'John'
echo json_encode($flat, JSON_PRETTY_PRINT);
Ověření struktury
use function Petrovo\Array\getArrayValue;
// Bezpečný test existence klíče
if (getArrayValue($array, 'some:key') !== null) {
echo "Klíč existuje\n";
}