Archiv der Kategorie: snippet

PHP-Snippet: stripArrayKey

Aus einem QueryString (z.B. dem $_GET) nicht gewollte Parameter löschen:


function stripArrayKey($sInput, $arrKeysToStrip = array()) {

if (count($arrKeysToStrip)<=0) {
return $sInput;
}

$arrResult = array();
parse_str($sInput, $arrResult);

foreach ($arrKeysToStrip AS $keyName) {
if (array_key_exists($keyName, $arrResult)) {
unset($arrResult[$keyName]);
}
}

return http_build_query($arrResult);
}

Vorher:

param1=value&param2=otherValue&myParam=unwanted&param3=moreValue


return stripArrayKey($sQuerystring, array('myParam','param2'));

Nachher:

param1=value&param3=moreValue

Wahlweise auch gleich viele Parameter auf einen Rutsch.

Arrayelemente zählen mit Smarty

Die Anzahl der Elemente eines Arrays in Smarty erhält man mit


{$myArray|@count}

oder mit


{@count($myArray)}

Damit lassen sich schöne Ausgaben zaubern, in dem man etwa prüft, ob ein Array Werte beinhaltet (z.B. nach einer DB-Abfrage) oder eben nicht und dann, je nachdem, die Ausgabe Benutzerfreundlich macht:


{if @count($myArray)>0}
Toll, es gibt {@count($myArray)} Einträge :)
{else}
Sorry, keine Einträge gefunden :(
{/if}

Die Angabe des @-Modifikators gibt an, dass nun eine PHP Funktion folgt. Intern wird also die PHP-Funktion count aufgerufen und dessen Rückgabe dann eingesetzt und benutzt.

Aber aufpassen: Wenn die $security Variable auf true steht, dann muss jede PHP-Funktion, die man so benutzen möchte, auch im $security_settings[‚MODIFIER_FUNCS‘]-Array stehen, sonst funktioniert der Aufruf nicht!

Quelle: Smarty-Doku, Kapitel 5 – Variablen Modifikatoren

UTF Dateien mit PHP fopen erzeugen

Will Mensch eine „UTF-8“ Datei mit PHP’s eigener fopen-Funktion erzeugen, muss er nur ein paar Dinge beachten.

Zum einen muss der jeweilige Inhalt des fwrite-Befehl UTF-8 encoded sein; das erreicht man am sichersten über die Funktion mb_convert_encoding.

Dann erzeugt man das File auf jeden Fall mit dem ‚b‘ Parameter, sicher ist sicher.

Als letztes setzt Mensch in der Datei noch die entsprechende „Byte Order Mark“ hinein. Das passiert mit Hilfe des pack-Kommandos.

Letztendlich kann man dann seinen Content in die Datei schreiben.


$content = mb_convert_encoding($content,'UTF-8');
$fHandle = fopen($filename,'wb');
fwrite($fHandle, pack("CCC",0xef,0xbb,0xbf));
fwrite($fHandle, $content);
fclose($fHandle);

P.S.: Nicht das fclose vergessen, das wäre einfach schlechter Stil 😉

PHP-Snippet: int2bin

Integer zu Binär casten:


function int2bin($number)
{
$number = filter_var($number,FILTER_SANITIZE_NUMBER_INT);
return ($number=='') ? FALSE : base_convert($number, 10, 2);
}

Eingabe: Eine Zahl oder ein String mit Zahlen darin.
Rückgabe: FALSE, wenn keine Zahl in $number gefunden wurde oder die entsprechende Binär-Ausgabe der Zahlen in §number.
Hinweis: $number=’A21′ erhält ‚10101‘ als Rückgabe!

Führungsnull in Excel aus CSV anzeigen

Viele kennen das Problem. Man hat eine CSV Datei, in dieser steht eine Postleitzahl oder eine Telefonnummer, die als erste Stelle eine 0 (Null) hat.

Öffnet man das nun in Excel, ist die Null weg.

Beispiel: Ein Kunde kommt aus Dresden, gibt als PLZ “01307” ein. Exportiert man das ganze dann als “kunden.csv” und doppelklickt es in Excel auf, so erscheint “1307”, was ja nicht ganz richtig ist. Excel ist einfach zu schlau…

Da wir aber klein, trotzig und unwürdig sind, möchten wir trotzdem die führende Null sehen; der Kunde übrigens auch. Da der Kunde König und Excel eh nur eingekauft ist, ist der Weg klar: Die Null muss her!

Wer lange sucht, der findet auch die tollsten Lösungswege. Nicht Excel muss sich an uns, vielmehr müssen wir uns an Excel anpassen; sprich: Nicht einfach per doppelklick öffnen, o nein, gefälligst per Import die Daten einholen und dann als Text formatieren.

Das kann es nicht sein, hier also der Weg des Programmierers!

Unser Vorteil ist, das Excel die Daten pro Spalte nicht nur importiert, sondern auch interpretiert, d.h. wir benutzen eine Funktion aus Excel, die dafür sorgt, dass die Daten korrekt dargestellt werden.

Diese heißt für unseren Zweck: VERKETTEN

Will man also diese Zeile richtig importieren:

“Max”;”01307”;”Dresden”

Dann muss man sowas schreiben:

“Max”;”=VERKETTEN(0;1;3;0;7)”;”Dresden”

Und da Programmierer erwiesenermaßen faul sind, werfe ich gleich mal eine PHP-Funktion dafür in die Runde. Die kann sicherlich noch optimiert werden, aber für’s erste genügt diese den Anforderungen:

function formatForExcel($text) 
{
   $excelText = '=VERKETTEN(';
   for($i=0; $i<strlen($text);$i++)
   {
     if ($i>0) {
       $excelText .= ';';
     }
     $excelText .= $text[$i];
   }   
   $excelText .= ')';
   return $excelText; 
}

Wird nun formatForExcel aufgerufen, dann werden die Daten entsprechend per “Verketten” abgelegt und dann in Excel richtig aufgerufen.