philos Δημοσ. 20 Ιανουαρίου 2022 Share Δημοσ. 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 Share Δημοσ. 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 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα