0%

📋 Masīvi PHP

Masīvi ļauj saglabāt vairākas vērtības vienā mainīgajā. PHP piedāvā bagātīgu masīvu funkciju bibliotēku.

php

Masīvu veidi

PHP ir trīs masīvu veidi: indeksēti, asociatīvi un daudzlīmeņu.

Teksts
<?php
// 1. Indeksēts masīvs (ar skaitliskiem indeksiem)
$augļi = ["ābols", "bumbieris", "ķirsis"];
// vai:
$augļi = array("ābols", "bumbieris", "ķirsis");

echo $augļi[0] . "<br>"; // ābols (0 no sākuma)
echo $augļi[2] . "<br>"; // ķirsis

// 2. Asociatīvs masīvs (ar virknes atslēgām)
$persona = [
    "vārds"   => "Anna",
    "vecums"  => 30,
    "pilsēta" => "Rīga"
];

echo $persona["vārds"] . "<br>";   // Anna
echo $persona["vecums"] . "<br";   // 30

// 3. Daudzlīmeņu masīvs
$studenti = [
    [
        "vārds"  => "Jānis",
        "kurss"  => 2,
        "atzīmes"=> [85, 90, 78]
    ],
    [
        "vārds"  => "Marta",
        "kurss"  => 3,
        "atzīmes"=> [92, 88, 95]
    ]
];

echo $studenti[0]["vārds"] . "<br>";    // Jānis
echo $studenti[1]["atzīmes"][0] . "<br>"; // 92
?>

Masīvu pārvaldīšana

Teksts
<?php
$saraksts = ["a", "b", "c"];

// Pievienot beigās
$saraksts[] = "d";            // Vienkāršākais veids
array_push($saraksts, "e", "f"); // Vairāki elementi

// Pievienot sākumā
array_unshift($saraksts, "z");

// Dzēst no beigām
$pēdējais = array_pop($saraksts);  // Noņem un atgriež "f"

// Dzēst no sākuma
$pirmais = array_shift($saraksts); // Noņem un atgriež "z"

print_r($saraksts); // [a, b, c, d, e]

// Dzēst pēc indeksa
unset($saraksts[1]); // Dzēš "b", bet indeksi netiek pārnumurēti!
print_r($saraksts);  // [0=>a, 2=>c, 3=>d, 4=>e]

// Pārnumurēt indeksus
$saraksts = array_values($saraksts);
print_r($saraksts); // [0=>a, 1=>c, 2=>d, 3=>e]

// Masīva garums
echo count($saraksts) . "<br>";  // 4

// Vai elements eksistē?
echo in_array("c", $saraksts) ? "Ir<br>" : "Nav<br>"; // Ir
echo isset($saraksts[5]) ? "Eksistē<br>" : "Nav<br>";   // Nav
echo array_key_exists("vārds", ["vārds" => "Anna"]) ? "Ir<br>" : "Nav<br>"; // Ir
?>

Noderīgas masīvu funkcijas

Teksts
<?php
$skaitļi = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3];

// Šķirošana
sort($skaitļi);           // Pieaugošā secībā (pārkārto oriģinālu)
print_r($skaitļi);        // [1, 1, 2, 3, 3, 4, 5, 5, 6, 9]

rsort($skaitļi);          // Dilstošā secībā
print_r($skaitļi);        // [9, 6, 5, 5, 4, 3, 3, 2, 1, 1]

$personas = [
    ["vārds" => "Pēteris", "vecums" => 25],
    ["vārds" => "Anna",    "vecums" => 30],
    ["vārds" => "Jānis",   "vecums" => 22],
];

// usort - šķirošana ar pielāgotu salīdzinātāju
usort($personas, function($a, $b) {
    return $a["vecums"] <=> $b["vecums"]; // Pēc vecuma
});

foreach ($personas as $p) {
    echo "{$p["vārds"]}: {$p["vecums"]}<br>"; // Jānis: 22, Pēteris: 25, Anna: 30
}

// asort/arsort - šķiro saglabājot asociācijas
$cenas = ["ābols" => 1.5, "bumbieris" => 2.3, "plūme" => 0.8];
asort($cenas);
print_r($cenas); // plūme=>0.8, ābols=>1.5, bumbieris=>2.3

// ksort - šķiro pēc atslēgas
ksort($cenas);
print_r($cenas); // ābols=>1.5, bumbieris=>2.3, plūme=>0.8
?>

<?php
// Masīvu apvienošana
$a = ["ābols", "bumbieris"];
$b = ["ķirsis", "plūme"];
$kopā = array_merge($a, $b);
print_r($kopā); // ābols, bumbieris, ķirsis, plūme

// Spread operators (PHP 7.4+)
$kopā2 = [...$a, ...$b];

// Unikālie elementi
$ar_dublikātiem = [1, 2, 2, 3, 3, 3, 4];
$unikālie = array_unique($ar_dublikātiem);
print_r($unikālie); // [1, 2, 3, 4]

// Apgriest secību
$apgriezts = array_reverse([1, 2, 3, 4, 5]);
print_r($apgriezts); // [5, 4, 3, 2, 1]

// Izgriezt daļu (slice)
$daļa = array_slice([10, 20, 30, 40, 50], 1, 3);
print_r($daļa); // [20, 30, 40]

// Summa un reizinājums
$skaitļi = [1, 2, 3, 4, 5];
echo array_sum($skaitļi) . "<br>";     // 15
echo array_product($skaitļi) . "<br>"; // 120

// Meklēšana - atgriež atslēgu
$atslēga = array_search("ķirsis", ["ābols", "bumbieris", "ķirsis"]);
echo $atslēga . "<br>"; // 2

// Masīva apvēršana (atslēgas <-> vērtības)
$apvērsts = array_flip(["a" => 1, "b" => 2, "c" => 3]);
print_r($apvērsts); // [1 => "a", 2 => "b", 3 => "c"]
?>

Filtrēšana un transformācija

🎓 Ko mācīties tālāk?

Nākamajā sadaļā iepazīstieties ar PHP funkcijām – kā strukturēt kodu atkārtoti izmantojamos blokos.

Teksts
<?php
$skaitļi = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// array_filter - filtrē pēc nosacījuma
$pāra = array_filter($skaitļi, function($n) {
    return $n % 2 === 0; // Patur tikai pāra skaitļus
});
print_r($pāra); // [2, 4, 6, 8, 10]

// array_map - transformē katru elementu
$kvadrāti = array_map(fn($n) => $n ** 2, $skaitļi);
print_r($kvadrāti); // [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

// array_reduce - reducēt masīvu uz vienu vērtību
$summa = array_reduce($skaitļi, function($nesējs, $elements) {
    return $nesējs + $elements;
}, 0); // 0 = sākotnējā vērtība
echo $summa . "<br>"; // 55

// Praktisks piemērs - produktu apstrāde
$produkti = [
    ["nosaukums" => "Ābols",  "cena" => 0.50, "aktīvs" => true],
    ["nosaukums" => "Bumbieris","cena" => 1.20, "aktīvs" => false],
    ["nosaukums" => "Ķirsis", "cena" => 2.50, "aktīvs" => true],
];

// Filtrē tikai aktīvos
$aktīvie = array_filter($produkti, fn($p) => $p["aktīvs"]);

// Iegūst tikai nosaukumus
$nosaukumi = array_map(fn($p) => $p["nosaukums"], $aktīvie);
echo implode(", ", $nosaukumi) . "<br>"; // Ābols, Ķirsis

// array_column - iegūst vienu kolonnu no daudzlīmeņu masīva
$cenas = array_column($produkti, "cena");
print_r($cenas); // [0.50, 1.20, 2.50]

// Ar indeksēšanu pēc kolonnas
$pēcNosaukuma = array_column($produkti, null, "nosaukums");
echo $pēcNosaukuma["Ābols"]["cena"] . "<br>"; // 0.50
?>