RedBeanPHP – Die einfach zu verwendende ORM-Bibliothek

RedBeanPHP ist eine einfach zu verwendende ORM-Bibliothek, die die Vorteile eines dokumentenorientierten Datenbanksystems wie z.B. mongoDB und eines relationalen Datenbanksystems vereint. RedBeanPHP kann direkt eingesetzt werden und erfordert keine aufwändige Konfiguration.

Anwendungsbeispiel:

//RedBeanPHP einbinden
require_once('rb.php');

//Datenbankverbindung einrichten
R::setup('mysql:host=localhost;dbname=test','root','password');

/*
Einen neuen Datensatz erzeugen
- Die Tabelle wird automatisch angelegt!
*/

$oEntry = R::dispense('mytable');
$oEntry->title = 'Hello World';

//Datensatz speichern
$iID = R::store($oEntry);

//Laden der gespeicherten Daten
$oEntry = R::load('mytable', $iID);

//Anzeigen des Titels
echo $oEntry->title;

Link: http://redbeanphp.com/
GitHub: https://github.com/gabordemooij/redbean

Mit PHP ein mehrdimensionales Array durchsuchen

Die Methode „array_multi_search“ durchsucht ein mehrdimensionales Array nach einem Wert. Optional kann die Suche auf einen bestimmten Schlüssel eingeschränkt werden. Im Erfolgsfall wird ein Array mit den Suchergebnissen zurückgegeben.

Code:

function array_multi_search($mSearch, $aArray, $sKey = "")
{
    $aResult = array();
   
    foreach( (array) $aArray as $aValues)
    {
        if($sKey === "" && in_array($mSearch, $aValues)) $aResult[] = $aValues;
        else
        if(isset($aValues[$sKey]) && $aValues[$sKey] == $mSearch) $aResult[] = $aValues;
    }
   
    return $aResult;
}

Mit PHP ein mehrdimensionales Array durchsuchen weiterlesen

PHP: Doppelte Elemente aus einem mehrdimensionalen Array entfernen

Der folgende Code entfernt alle doppelten Elemente aus einem mehrdimensionalen Array. Der strukturelle Aufbau spielt dabei keine Rolle.

Code:

/* Vorher:
Array
(
    [0] => Array ( [0] => unique )
    [1] => Array
        (
            [0] => Array ( [0] => 1337 )
            [1] => Array ( [0] => 1338 )
        )
    [2] => Array
        (
            [0] => Array ( [0] => 1337 )
            [1] => Array ( [0] => 1338 )
        )
    [3] => Array ( [test] => test )
    [4] => Array ( [test] => test )
    [5] => Array ( [0] => 123456 )
    [6] => Array ( [0] => 123456 )
)
*/


$aArray = array_map("unserialize", array_unique(array_map("serialize", $aArray)));

/* Nachher:
Array
(
    [0] => Array ( [0] => unique )
    [1] => Array
        (
            [0] => Array ( [0] => 1337 )
            [1] => Array ( [0] => 1338 )
        )
    [3] => Array ( [test] => test )
    [5] => Array ( [0] => 123456 )
)
*/

PHP: Event-Driven Programming mit WAMP (WebSockets)

Das WebSocket Application Messaging Protocol ist ein Protokoll welches WebSockets nutzt um Funktionen wie RPC (Remote Procedure Call) und PubSub (Publish & Subscribe) anzubieten. Intern werden die Nutzdaten mit Hilfe von JSON transportiert. Mittlerweile existieren einige Implementierungen um WAMP (http://wamp.ws) einzusetzen. Für PHP gibt es z.B. Ratchet: (http://socketo.me) . Ratchet ist eine lose gekoppelte Bibliothek, die einem Entwickler die Möglichkeit gibt, eine bi-direktionale Echtzeitkommunikation zwischen Client und Server in PHP umzusetzen. Als Gegenstück für den Server kann die JavaScript-Bibliothek Autobahn (http://autobahn.ws/js) verwendet werden.

Vorraussetzungen für die Beispielimplementierung:

  • PHP 5.4 Interpreter (idealerweise XAMPP auf Laufwerk C:)
  • Browser mit WebSocket-Support
  • Features:

  • An Topic anmelden / abmelden
  • Nachricht versenden / empfangen
  • Remote Procedure Call
  • Über WebSockets bewegliches DIV
  • Screenshot Client:
    WAMP Beispielimplementierung Client
    Screenshot Server:
    WAMP Beispielimplementierung Server

    PHP: Event-Driven Programming mit WAMP (WebSockets) weiterlesen

    Ausführungszeit innerhalb eines PHP-Skripts messen

    Leider bietet PHP keine native Möglichkeit um die Ausführungszeit innerhalb eines Skripts zu messen. Um die Performance von Code-Blöcken zu steigern, muss zuerst die leistungsschwache Stelle ausgemacht werden. Hierbei kann die Klasse „StopWatch“ behilflich sein.

    class StopWatch
    {
        private static $fTimeStart = 0.00;
        private static $fTotal = 0.00;
       
        public static function start()
        {
            self::$fTimeStart = microtime(true);
            self::$fTotal      = 0.00;
        }
       
        public static function stop()
        {
            $fTimeEnd = (microtime(true)-self::$fTimeStart);
            echo "Zeit: ".number_format($fTimeEnd, 15)."s\n";
        }
    }

    StopWatch::start();

    for($i = 0; $i < 1000000; $i++)
    {
        //mache irgendetwas...
    }

    StopWatch::stop();

    /*
     * Ausgabe:
     * Zeit: 0.051145076751709s
     */