akis_fc Δημοσ. 6 Ιουλίου 2015 Δημοσ. 6 Ιουλίου 2015 Το concept έχω html μέσα σε μία μεταβλητή, υπάρχουν εκεί μέσα κάποια paths για images τα οποία θέλω να τα αντικαταστήσω με άλλα. Το πρόβλημα είναι ότι ενώ matcharei ένα λινκ, ένα άλλο όχι χωρίς να μπορώ να καταλάβω το γιατί. Για αρχή ο κώδικας: foreach ($data as $key => $row) { $images = json_decode($row['images'], true); foreach ($images as $im) { $url = str_replace('http:', '', $im['url']); $data[$key]['body'] = str_replace($url, '@@@@@@@@@@@@@@', $row['body']); } } Τι έχει μέσα το $im: 1st loop ---> Array ( [url] => http://content.domain.com/origin/domaininc/DomainSpaces/Production/Cms/POLL/y9dntmhrguiab2jdbsy98w.png [path] => full/a1acab054a658adf648e50225936242285e5f398.jpg [checksum] => d4795532e74b28d373d091b598de76c7 ) 2nd loop ---> Array ( [url] => http://content.domain.com/origin/domaininc/DomainSpaces/Production/Cms/POLL/e1i5h0ebheciq93p1vwuqw.png [path] => full/e41a0f2f6df438d1d7b363a93402ad67dd69cb29.jpg [checksum] => c51a8448834eab1f06f6fe28708f80b2 ) Τα επίμαχα σημεία του body πριν το τρέξιμο του κώδικα: <img alt="altTitle" src="//content.domain.com/origin/domaininc/DomainSpaces/Production/Cms/POLL/y9dntmhrguiab2jdbsy98w.png"> <img alt="altTitle2" src="//content.domain.com/origin/domaininc/DomainSpaces/Production/Cms/POLL/e1i5h0ebheciq93p1vwuqw.png"> Τα επίμαχα σημεία του body μετά το τρέξιμο του κώδικα: <img alt="altTitle" src="//content.domain.com/origin/domaininc/DomainSpaces/Production/Cms/POLL/y9dntmhrguiab2jdbsy98w.png"> <img alt="altTitle2" src="@@@@@@@@@@@@@@">
defacer Δημοσ. 6 Ιουλίου 2015 Δημοσ. 6 Ιουλίου 2015 Όταν ενημερώνεται το $data δεν ενημερώνεται μαζί και το $row. Βλέπεις τώρα το πρόβλημα;
akis_fc Δημοσ. 6 Ιουλίου 2015 Μέλος Δημοσ. 6 Ιουλίου 2015 Οπότε "ξεχνάει" το προηγούμενο σωστός!! Και το έγραψα έτσι για να μην το περνάω με reference συμφέρει τελικά? εδιτ: παίζει το κέρατο!
defacer Δημοσ. 6 Ιουλίου 2015 Δημοσ. 6 Ιουλίου 2015 Καλά το έγραψες εκτός από αυτό που σου ξέφυγε. Το reference θα ήταν μια λύση αλλά γενικά τα references στην PHP είναι τελείως fucked up και θα σου πρότεινα να τα αποφεύγεις όπως ο διάολος το λιβάνι. Αν χρησιμοποιήσεις πάντως reference για κάποιο λόγο θυμήσου πάντα να το κάνεις unset αμέσως μετά το loop γιατί διαφορετικά είναι θέμα χρόνου να την πατήσεις με άλλο τρόπο και να τραβάς ο,τι προεξέχει. Για να αποφύγεις το loop μέσα σε loop σε τέτοιες περιπτώσεις (και άρα να μην αφήσεις τη δυνατότητα να κάνεις το ίδιο λάθος) πάντως μη ξεχνάς ότι η str_replace παίρνει και πίνακες σαν arguments: $find = ["one", "two"]; $replace = ["ena", "dyo"]; echo str_replace($find, $replace, "one two three"); και μπορείς επίσης να δώσεις το $find σαν πίνακα και το $replace σα σταθερή τιμή, όπως θα βόλευε να κάνεις στο παράδειγμά σου.
akis_fc Δημοσ. 6 Ιουλίου 2015 Μέλος Δημοσ. 6 Ιουλίου 2015 Στην ουσία αυτό που κάνω στο παράδειγμα είναι να αντικαθιστώ το url με το path εφόσον κάνει match το checksum οπότε βολεύει να δώσω και στα δύο πίνακες (θα δείξει στην πράξη πόσο). Επίσης αν θυμάμαι καλά νομίζω έχει και μία ιδιαίτερη μεταχείρηση η str_replace εάν κάτι στο $replace υπάρχει και στο $find. 1st loop ---> Array ( [url] => http://content.domain.com/origin/domaininc/DomainSpaces/Production/Cms/POLL/y9dntmhrguiab2jdbsy98w.png [path] => full/a1acab054a658adf648e50225936242285e5f398.jpg [checksum] => d4795532e74b28d373d091b598de76c7 )
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα