philos Δημοσ. 20 Ιανουαρίου 2022 Δημοσ. 20 Ιανουαρίου 2022 (επεξεργασμένο) Αντιμετωπίζω το εξής θέμα σε PHP script. Μην φρικάρετε, προέκυψε ύστερα από δοκιμές χτίσιμο - χτίσιμο Έχω πετύχει αυτό που θέλω, όμως θέλω να το βελτιώσω ώστε να μην έχω τόσες συγκρίσεις. Η συγκεκριμένη function παίρνει ως arguments έναν πίνακα με δεδομένα και τον φιλτράρει βάσει της $city. Το key 'onoma_sxolis' δεν έχει exact την πόλη, γι' αυτό κάνω strpos. public function processFilterSxoles($arr, $city) { $attika_cities = array('ΑΤΤΙΚΗ & ΠΕΙΡΑΙΑΣ', 'ΑΘΗΝΑ', 'ΑΙΓΑΛΕΩ', 'ΙΛΙΟΝ', 'ΠΕΙΡΑΙΑΣ'); return array_filter($arr, function($var) use ($city, $attika_cities) { return (strpos($var['onoma_sxolis'], $city) !== false || ( (strpos($var['onoma_sxolis'], $attika_cities[0]) !== false || strpos($var['onoma_sxolis'], $attika_cities[1]) !== false || strpos($var['onoma_sxolis'], $attika_cities[2]) !== false || strpos($var['onoma_sxolis'], $attika_cities[3]) !== false || strpos($var['onoma_sxolis'], $attika_cities[4]) !== false) && in_array($city, $attika_cities)) || ($city == 'ΑΓΙΟΣ ΝΙΚΟΛΑΟΣ' && strpos($var['onoma_sxolis'], 'ΑΣΤΕΚ') !== false) || ($city == 'ΡΟΔΟΣ' && strpos($var['onoma_sxolis'], 'ΑΣΤΕΡ') !== false) || (strpos($var['idryma'], 'ΑΣΠΑΙΤΕ') !== false && in_array($city, $attika_cities)) ); }); } Επί της ευκαιρίας - αν η $city είναι πόλη της Αττικής την κρατάει κι αυτήν, βάσει του $attika_cities. - κάποιες επιπλέον εξαιρέσεις προσθέτονται (ΡΟΔΟΣ - ΑΣΤΕΡ) κτλ. Τι θέλω να βελτιώσω: 1. Να αντικαταστήσω όλα τα: strpos($var['onoma_sxolis'], $attika_cities[x]) !== false ...με μια εντολή κώδικα κι όχι βάζοντας τα index. 2. Να αντικαταστήσω το: || ($city == 'ΑΓΙΟΣ ΝΙΚΟΛΑΟΣ' && strpos($var['onoma_sxolis'], 'ΑΣΤΕΚ') !== false) || ($city == 'ΡΟΔΟΣ' && strpos($var['onoma_sxolis'], 'ΑΣΤΕΡ') !== false) ... με μια εντολή κώδικα, χρησιμοποιώντας έναν array με δεδομένα όπως αυτόν: $special_cases = ['ΑΓΙΟΣ ΝΙΚΟΛΑΟΣ' => 'ΑΣΤΕΚ', 'ΡΟΔΟΣ' => 'ΑΣΤΕΡ']; Έτσι να μπορώ να βάζω όποιες εξαιρέσεις θέλω πιο άνετα. Ίσως το πρόβλημα μπορεί να λυθεί με καμία preg_match αλλά δεν ξέρω regular expressions. Επεξ/σία 20 Ιανουαρίου 2022 από philos
k33theod Δημοσ. 21 Ιανουαρίου 2022 Δημοσ. 21 Ιανουαρίου 2022 (επεξεργασμένο) για το 1ο πχ μπορείς να πείς foreach($attica_cities as $city) { $ress = array_filter($arr, function($var){return strpos($var['onoma_sxolis'], $city) !== false;}) array_merge($ola, $ress); } To $ola θα τα έχει στο τέλος όλα. Το άλλο παρομοιώς με ένα foreach foreach ($special_cities as $key = > $value) { $result = array_filter($cities, function($var) {return $city == $key && strpos($var['onoma_sxolis'], $value) !== false;}); array_merge($ola, $result); } Εάν το array είναι μεγάλο ίσως έτσι είναι πιο αργή η εκτέλεση Επεξ/σία 21 Ιανουαρίου 2022 από k33theod 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα