/ Gists / PHP

Gists - PHP

On gists

PHP iterator (Record OOP class)

PHP

Record1.php #

<?php

class Record {
    private $data = [];
    private $currentIndex = 0;

    public function addRecord($value) {
        $this->data[] = $value;
    }

    public function getRecord() {
        if ($this->currentIndex < count($this->data)) {
            $record = $this->data[$this->currentIndex];
            $this->currentIndex++;
            return $record;
        } else {
            return null;
        }
    }
}

// Vytvoření instance třídy
$recordKeeper = new Record();

// Přidání záznamů
$recordKeeper->addRecord("John");
$recordKeeper->addRecord(30);
$recordKeeper->addRecord("New York");

// Získání a postupné procházení všech záznamů pomocí cyklu foreach a metody getRecord()
echo "All records:<br>";
while ($record = $recordKeeper->getRecord()) {
    echo $record . "<br>";
}

On gists

PHP - Yield

PHP

example.php #

<?php

function generatorFunction() {
    yield 1;
    yield 2;
    yield 3;
}

// Použití generátoru
$generator = generatorFunction();

foreach ($generator as $value) {
    echo $value . ' ';
}

// Výstup: 1 2 3


/* -----------------------------  */


names.txt 
===
John Doe
Jane Smith
Bob Johnson
Alice Williams
... (a mnoho dalších jmen)



function readNamesFromFile($filename) {
    $file = fopen($filename, 'r');
    if (!$file) {
        throw new Exception("Nepodařilo se otevřít soubor.");
    }

    while (($line = fgets($file)) !== false) {
        yield trim($line);
    }

    fclose($file);
}

// Použití generátoru pro zpracování jmen ze souboru
$generator = readNamesFromFile('names.txt');

foreach ($generator as $name) {
    // Provádění operace s každým jménem
    echo "Hello, $name!" . PHP_EOL;
}


/* -----------------------------  */


function randomDataGenerator($count) {
    for ($i = 0; $i < $count; $i++) {
        yield rand(1, 100); // Generujeme náhodné číslo v rozmezí 1 až 100
    }
}

// Generujeme 10 náhodných čísel
$generator = randomDataGenerator(10);

foreach ($generator as $number) {
    // Provádění operace s každým náhodným číslem
    echo $number . ' ';
}


/* -----------------------------  */


function searchValueInArray(array $array, $value) {
    foreach ($array as $item) {
        if (in_array($value, $item)) {
            yield $item;
        }
    }
}

// Příklad použití:

$data = array(
    array('id' => 1, 'name' => 'John'),
    array('id' => 2, 'name' => 'Jane'),
    array('id' => 3, 'name' => 'Bob'),
    array('id' => 4, 'name' => 'Alice')
);

$searchValue = 'Bob';

foreach (searchValueInArray($data, $searchValue) as $result) {
    echo "Hodnota nalezena: " . $result['name'] . "\n";
}

On gists

sort.php

PHP

sort.php #

public function sortInCurrentLanguage(array $items)
	{
		$oldLocale = setlocale(LC_ALL, 0);
		setlocale (LC_ALL, 'cs_CZ.UTF-8');
		uasort($items, 'strcoll');
		setlocale (LC_ALL, $oldLocale);

		

On gists

Sort in current language

PHP Libs PHP

sort.php #

<?php

public function sortInCurrentLanguage(array $items)
{
		$oldLocale = setlocale(LC_ALL, 0);
		setlocale (LC_ALL, 'cs_CZ.UTF-8');
		uasort($items, 'strcoll');
		setlocale (LC_ALL, $oldLocale);

}

On gists

Fake visitor u productu ;)

PHP

fake-visitor-by-gtp.php #

<?php
session_start();

// Interval v sekundách, po kterém se změní počet prohlížejících
$interval = 10; // Například každých 10 sekund

// Kontrola, zda již byl počet prohlížejících inicializován v session
if (!isset($_SESSION['prohlizeloLidi'])) {
  // Pokud ne, vygenerujte falešný počet prohlížejících (např. 65)
  $_SESSION['prohlizeloLidi'] = 65;
  $_SESSION['lastUpdate'] = time(); // Poslední aktualizace na aktuální čas
}

// Získání počtu prohlížejících z session
$prohlizeloLidi = $_SESSION['prohlizeloLidi'];

// Získání času poslední aktualizace
$lastUpdate = $_SESSION['lastUpdate'];

// Aktuální čas
$currentTime = time();

// Počet sekund od poslední aktualizace
$secondsSinceLastUpdate = $currentTime - $lastUpdate;

// Změna počtu prohlížejících po uplynutí intervalu
if ($secondsSinceLastUpdate >= $interval) {
  // Generování náhodného směru změny (-1 pro snížení, 1 pro zvýšení)
  $changeDirection = rand(0, 1) === 0 ? -1 : 1;

  // Generování náhodného počtu prohlížejících, který se přičte nebo odečte od aktuálního počtu
  $changeAmount = rand(1, 5); // Například změna o 1 až 5 prohlížejících

  // Nový počet prohlížejících
  $prohlizeloLidi += $changeDirection * $changeAmount;

  // Ošetření, aby počet neklesl pod nulu
  if ($prohlizeloLidi < 0) {
    $prohlizeloLidi = 0;
  }

  // Aktualizace posledního aktualizovaného času
  $_SESSION['lastUpdate'] = $currentTime;
}

// Uložení nového počtu prohlížejících do session
$_SESSION['prohlizeloLidi'] = $prohlizeloLidi;

// Vypsání informace
echo "Toto zboží si právě prohlíží $prohlizeloLidi lidí.";

// Ukončení session
session_write_close();
?>

On gists

PHP local server

PHP CLI

in-cli.cli #

php -S localhost:9000

On gists

Access Control (cross origin allow for all) - API

PHP Web Api

api.php #

<?php

header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

$films = [
    [
        'id' => 1628,
        'name' => 'Sám doma',
        'url' => 'https://www.csfd.cz/film/1628-sam-doma/prehled/',
    ],
    [
        'id' => 1629,
        'name' => 'Sám doma 2',
        'url' => 'https://www.csfd.cz/film/1629-sam-doma-2-ztracen-v-new-yorku/prehled/',
    ]
];

echo json_encode($films);

On gists

Sort array by multiple values

Popular ⭐ PHP

sort.php #

<?php

// https://blog.martinhujer.cz/clever-way-to-sort-php-arrays-by-multiple-values/
// https://stackoverflow.com/questions/2699086/how-to-sort-a-multi-dimensional-array-by-value
// COMPLEX: https://stackoverflow.com/questions/17364127/how-can-i-sort-arrays-and-data-in-php
// https://stackoverflow.com/questions/44309585/properly-sorting-multidimensional-array-using-usort-and-spaceship-operator/44309755#44309755

// 1)
// order products by: price ASC, inStock DESC, isRecommended DESC, name ASC
usort($products, function (Product $a, Product $b): int {
    return
        ($a->getPrice() <=> $b->getPrice()) * 1000 + // price ASC
        ($b->isInStock() <=> $a->isInStock()) * 100 + // inStock DESC
        ($b->isRecommended() <=> $a->isRecommended()) * 10 + // isRecommended DESC
        ($a->getName() <=> $b->getName()); // name ASC
});


// 2) 
// order products by: price ASC, inStock DESC, isRecommended DESC, name ASC
usort($products, fn (Product $a, Product $b): int =>
    ($a->getPrice() <=> $b->getPrice()) * 1000 + // price ASC
    ($b->isInStock() <=> $a->isInStock()) * 100 + // inStock DESC
    ($b->isRecommended() <=> $a->isRecommended()) * 10 + // isRecommended DESC
    ($a->getName() <=> $b->getName()) // name ASC
);

// 3)
usort($products, fn (Product $a, Product $b): int =>
    [$a->getPrice(), $b->isInStock(), $b->isRecommended(), $a->getName()]
    <=>
    [$b->getPrice(), $a->isInStock(), $a->isRecommended(), $b->getName()]
);



usort($myArray, function($a, $b) {
    $retval = $a['order'] <=> $b['order'];
    if ($retval == 0) {
        $retval = $a['suborder'] <=> $b['suborder'];
        if ($retval == 0) {
            $retval = $a['details']['subsuborder'] <=> $b['details']['subsuborder'];
        }
    }
    return $retval;
});

On gists

Get file ext from filename

PHP

getExtension.php #

<?php

// https://stackoverflow.com/questions/173868/how-to-get-a-files-extension-in-php

$ext = end(explode('.', $filename));
$ext = substr(strrchr($filename, '.'), 1);
$ext = substr($filename, strrpos($filename, '.') + 1);
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);
$ext = strrchr($filename, '.');
$ext = pathinfo($filename, PATHINFO_EXTENSION)['extension'];
$ext  = (new SplFileInfo($path))->getExtension();

$exts = split("[/\\.]", $filename);
$n    = count($exts)-1;
$ext  = $exts[$n];

On gists

Move in array

PHP

list.php #

<?php

$states = ['Přijatá', 'Nová', 'K zaplacení', 'Zaplaceno', 'Expedováno', 'Doručeno'];
$currentState = isset($_GET['state']) ? $_GET['state'] : 'K zaplacení';

$totalStates = count($states);
$currentIndex = array_search($currentState, $states);
$prev = null;
$next = null;
$prevAll = [];
$nextAll = [];

foreach ($states as $index => $state) {

    if ($index < $currentIndex) {
        $prev = $state;
        $prevAll[] = $state;
    }

    if ($index > $currentIndex && $next === null) {
        $next = $state;
    }

    if ($index > $currentIndex) {
        $nextAll[] = $state;
    }
}

$meta = [
    'prev' => $prev, // predchozi stav vuci aktualnimu ...
    'prevAll' => $prevAll, // vsechny predchozi vuci aktualnimu  ...
    'next' => $next, // nasledujici stav vuci aktualnimu
    'nextAll' => $nextAll, // vsechny nasledujici po aktualnim
    'currentStateNumber' => $currentIndex, // aktualni cislo stavu, K zaplaceni => 2, Doručeno => 6 atd.
    'totalStates' => $totalStates, // celkovy pocet stavu, tj. 6
];


echo '<pre>';
print_r($meta);