5 τρόποι για να φιλτράρετε ένα array στην php

Αρκετές φορές χρειάζεται να φιλτράρουμε ένα array στην php και να κρατήσουμε μόνο τα στοιχεία που μας ενδιαφέρουν. Για να το πετύχουμε αυτό, μπορούμε να χρησιμοποιήσουμε διάφορους τρόπους, κάποιοι από τους οποίους είναι οι παρακάτω:

1ος τρόπος

function ArrayFilter1($array, $pattern)
{
        return array_filter($array, function($value) use ($pattern) { return preg_match($pattern, $value); });
}

2ος τρόπος

function ArrayFilter2($array, $pattern)
{
        $res = array();
        foreach($array as $a)
                if (preg_match($pattern, $a))
                        $res[] = $a;
        return $res;
}

3ος τρόπος

function ArrayFilter3($array, $find)
{
        return array_filter($array, function($value) use ($find) { return strpos($value, $find) !== false; });
}

4ος τρόπος

function ArrayFilter4($array, $find)
{
        $res = array();
        foreach($array as $a)
                if (strpos($a, $find) !== false)
                        $res[] = $a;
        return $res;
}

5ος τρόπος

function ArrayFilter5($array, $find)
{
        foreach($array as $k => $a)
                if (strpos($a, $find) === false)
                        unset($array[$k]);
        return $array;
}

Στις περιπτώσεις 1, 3 και 5, τα array keys διατηρούνται, ενώ στις περιπτώσεις 2 και 4 χάνονται και ξεκινούν από το 0.

Τι γίνεται όμως με την απόδοση κάθε μιας από τις παραπάνω περιπτώσεις; Έχοντας ως είσοδο τα παρακάτω δοκιμαστικά δεδομένα, εκτελέσαμε 10 φορές την κάθε περίπτωση αναζητώντας αρχεία με κατάληξη .php

$array = array
(
        "l1" => "styles.css",
        "l2" => "gallerystyle.css",
        "l3" => "index.php",
        "l4" => "javascript:;",
        "l5" => "javascript:;",
        "l6" => "about.php",
        "l7" => "gallery.php?id=33",
        "l8" => "gallery.php?id=30",
        "l9" => "gallery.php?id=21"
);

Οι χρόνοι για την κάθε περίπτωση ήταν:

  1. array_filter preg_match: 0.0010430812835693
  2. foreach preg_match: 0.00051212310791016
  3. array_filter strpos: 0.00095891952514648
  4. foreach strpos: 0.00039100646972656
  5. foreach strpos με unset: 0.00040817260742188

Το συμπέρασμα είναι ότι οι λύσεις, στις οποίες χρησιμοποιήθηκε η foreach, χρειάστηκαν περίπου το μισό χρόνο εκτέλεσης σε σχέση με αυτές που χρησιμοποιήθηκε η array_filter.

Git Books

Το Git είναι ένα κατανεμημένο σύστημα για version control, αλλά όχι το μοναδικό. Αν είστε προγραμματιστές και δε χρησιμοποιείτε git ή κάτι αντίστοιχο, σας προτείνουμε να ξεκινήσετε :)

Διαβάστε online ή κατεβάστε δωρεάν τo git community book,
ή εναλλακτικά αγοράστε το επίσης πολύ καλό pro git.

Καλό διάβασμα!

 

 

 

PHP 5.3.7 crypt bug

Πριν λίγες ημέρες κυκλοφόρησε η έκδοση 5.3.7 της PHP, η οποία έχει ένα σοβαρό πρόβλημα στη συνάρτηση crypt όταν εκτελείται με md5 salts. Περισσότερα μπορείτε να διαβάσετε στη διεύθυνση https://bugs.php.net/bug.php?id=55439 . Προς το παρόν, καλό είναι να περιμένετε την έκδοση 5.3.7p11 ή την 5.3.8.

Χρήσιμοι σύνδεσμοι για προγραμματισμό σε Javascript

Javascript mistakes you must avoid

Javascript function arguments

DOM DocumentFragments

How javascript timers work

Χρήσιμοι σύνδεσμοι για προγραμματισμό σε Java

Strings

Why String is immutable in Java

String memory leak in Java applications

The String Class

Memory

10 Points about Heap in Java

10 points about Java Heap Space or Java Heap Memory

Classpath

How Classpath work in Java?

Threads

Why wait (), notify () and notifyAll () must be called from synchronized block or method in Java

Χρήσιμες συντομεύσεις για τον Vim

Ο vim είναι ο editor της επιλογής μου για τη συγγραφή php κώδικα. Μερικές χρήσιμες συντομεύσεις είναι:

Συντόμευση Περιγραφή
:12 Πηγαίνει στη 12η γραμμή
gg Πηγαίνει στην 1η γραμμή
G Πηγαίνει στην τελευταία γραμμή
ο Προσθέτει κενή γραμμή κάτω από το σημείο που βρισκόμαστε
O Προσθέτει κενή γραμμή πάνω από το σημείο που βρισκόμαστε
ma Προσθέτει την τρέχουσα γραμμή στα bookmarks με την ονομασία a (οι πεζοί χαρακτήρες ισχύουν σε επίπεδο αρχείου. Αν θέλουμε global bookmarks πρέπει να χρησιμοποιήσουμε κεφαλαίους χαρακτήρες πχ mA
‘a Επιστροφή στο bookmark με ονομασία a
:set nu Ενεργοποίηση εμφάνισης αριθμών γραμμών
:set nonu Απενεργοποίηση εμφάνισης αριθμών γραμμών
:set nohls Κατάργηση highlight κειμένου
:set paste Ενεργοποίηση επικόλλησης κειμένου από άλλη πηγή
:set nopaste Κατάργηση ενεργοποίησης επικόλλησης κειμένου από άλλη πηγή (το εκτελούμε όταν τελειώσουμε την επικόλληση)
:e όνομα_αρχείου Άνοιγμα αρχείου για επεξεργασία
:sp όνομα_αρχείου Άνοιγμα αρχείου για επεξεργασία σε νέο παράθυρο στο πάνω μέρος (split)
:sp +/λέξη_αναζήτησης όνομα αρχείου Άνοιγμα αρχείου για επεξεργασία σε νέο παράθυρο στο πάνω μέρος και μεταφορά στη γραμμή που περιέχει τη λέξη αναζήτησης
:vsp όνομα_αρχείου Άνοιγμα αρχείου για επεξεργασία σε νέο παράθυρο στο αριστερό μέρος (vertical split)
Ctrl w w Μεταφορά σε άλλο ανοιχτό παράθυρο
yy Αντιγραφή γραμμής (yank)
5yy Αντιγραφή 5 γραμμών από αυτή που βρισκόμαστε και κάτω
v Επιλογή κειμένου για αντιγραφή (visual)
Shift v Επιλογή γραμμής (visual)
p Επικόλληση (paste)
P Επικόλληση στην πάνω γραμμή
:w όνομα_αρχείου Αποθήκευση αρχείου (με το συγκεκριμένο όνομα αν δώσουμε το όνομα_αρχείου)
:wq ή : x Αποθήκευση αρχείου και έξοδος
:q Κλείσιμο αρχείου (:q! για κλείσιμο χωρίς αποθήκευση)
u Ακύρωση ενέργειας (undo)
Ctrl r Επαναφορά στο σημείο πριν την ακύρωση ενέργειας (redo)
* Ψάχνει τη λέξη στην οποία βρισκόμαστε προς τα κάτω
# Ψάχνει τη λέξη στην οποία βρισκόμαστε προς τα πάνω
:%s/search/replace/gc Αντικαθιστά τη λέξη search με την replace (το search και replace μπορούν να είναι regular expressions) σε όλο το αρχείο (global) ρωτώντας πριν από κάθε αντικατάσταση (confirm)
:s/search/replace/g Αντικαθιστά τη λέξη search με την replace (το search και replace μπορούν να είναι regular expressions) στη γραμμή που βρισκόμαστε

Νέος server από την OnDesign

Στα πλαίσια της συνεχούς αναβάθμισης των υπηρεσιών μας, σας ενημερώνουμε ότι σήμερα τέθηκε σε λειτουργία ένας νέος ισχυρότερος server, ο οποίος χρησιμοποιεί λειτουργικό σύστημα Linux, PHP 5.3.x με το προηγμένο σύστημα ασφαλείας Suhosin Patch & Extension και ionCube Loader.

Με την αναβάθμιση αυτή, τα πακέτα φιλοξενίας (web hosting) της OnDesign υποστηρίζουν τα ευρέως διαδεδομένα συστήματα διαχείρισης βάσεων δεδομένων MySQL 5.0.x και PostreSQL 9.0.x με υποστήριξη γεωγραφικής πληροφορίας (PostGIS).

Ολοκληρώθηκε η κατασκευή του ιστοχώρου για την ποδοσφαιρική ομάδα “Κόροιβος Φ.Σ.”

Η OnDesign ολοκλήρωσε τη σχεδίαση και την ανάπτυξη του νέου δυναμικού ιστοχώρου της ποδοσφαιρικής ομάδας “Κόροιβος Φ.Σ.“.

Επισκεφθείτε το νέο ιστοχώρο στη διεύθυνση: http://www.koroivosfc.gr/

Κόροιβος Φ.Σ.

Ολοκληρώθηκε η κατασκευή του ιστοχώρου για την καλλιτεχνική ομάδα “Κι ομΩς κινείται”

Η OnDesign ολοκλήρωσε τη σχεδίαση και την ανάπτυξη του νέου δυναμικού ιστοχώρου της καλλιτεχνικής ομάδας “Κι ομΩς κινείται“. Το δημιουργικό τμήμα της OnDesign ανέλαβε εκτός από την σχεδίαση του site και την επεξεργασία του φωτογραφικού υλικού.

Επισκεφθείτε το νέο ιστοχώρο στη διεύθυνση: http://www.kiomoskineitai.gr

Κι όμΩς κινείται

Ολοκληρώθηκε η κατασκευή του ιστοχώρου για την επιχείρηση PointNet

Η OnDesign ολοκλήρωσε τη σχεδίαση και την ανάπτυξη του νέου δυναμικού ιστοχώρου της εταιρίας πληροφορικής PointNet. Επίσης, το δημιουργικό τμήμα της OnDesign ανέλαβε την σχεδίαση της εταιρικής ταυτότητας της PointNet, σχεδιάζοντας το λογότυπο και τις κάρτες της εταιρείας.

Επισκεφθείτε τον ιστοχώρο στην διεύθυνση: http://www.pointnet.gr

PointNet

Return top