Skip to content

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 key při chybějícím nastavení
  • Čitelný kód – vidíš strukturu přímo v klíči
  • Vrací null mí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";
}