Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Το 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="@@@@@@@@@@@@@@">
Δημοσ.

Οπότε "ξεχνάει" το προηγούμενο σωστός!! Και το έγραψα έτσι για να μην το περνάω με reference συμφέρει τελικά?

 

εδιτ: παίζει το κέρατο!

Δημοσ.

Καλά το έγραψες εκτός από αυτό που σου ξέφυγε.

 

Το 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 σα σταθερή τιμή, όπως θα βόλευε να κάνεις στο παράδειγμά σου.

Δημοσ.

Στην ουσία αυτό που κάνω στο παράδειγμα είναι να αντικαθιστώ το 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 )

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...