Μήπως PHP έχει ισοδύναμο με αυτό το είδος της υποκατάστασης εγχόρδων Python;

ψήφοι
11

Η Python έχει αυτό το υπέροχο τρόπο χειρισμού αντικαταστάσεις χορδών χρησιμοποιούν τα λεξικά:

>>> 'The %(site)s site %(adj)s because it %(adj)s' % {'site':'Stackoverflow', 'adj':'rocks'}
'The Stackoverflow site rocks because it rocks'

Μου αρέσει αυτό γιατί μπορείτε να ορίσετε μια τιμή φορά στο λεξικό και στη συνέχεια να αντικαταστήσει σε όλη τη χώρα στη σειρά.

Έχω προσπαθήσει να επιτύχει κάτι παρόμοιο σε PHP χρησιμοποιώντας διάφορες κορδόνι αντικαταστήσει λειτουργίες, αλλά ό, τι έχω καταλήξει αισθάνεται άβολα.

Πιστεύει κανείς να έχει ένα ωραίο καθαρό τρόπο για να γίνει αυτό το είδος της υποκατάστασης συμβολοσειράς στην PHP;

Επεξεργασία
Εδώ είναι ο κώδικας από τη σελίδα sprintf που μου άρεσε καλύτερα.

<?php

function sprintf3($str, $vars, $char = '%')
{
    $tmp = array();
    foreach($vars as $k => $v)
    {
        $tmp[$char . $k . $char] = $v;
    }
    return str_replace(array_keys($tmp), array_values($tmp), $str);
}

echo sprintf3( 'The %site% site %adj% because it %adj%', array('site'=>'Stackoverflow', 'adj'=>'rocks'));
?>
Δημοσιεύθηκε 26/08/2008 στις 13:20
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
1

Μερικές από τις σημειώσεις που προέρχεται από χρήστες και τις λειτουργίες σε τεκμηρίωση της PHP για sprintf έρθει πολύ κοντά.

Σημείωση: Ψάξτε στη σελίδα «sprintf2».

Απαντήθηκε 26/08/2008 στις 13:30
πηγή χρήστη

ψήφοι
5

function subst($str, $dict){
    return preg_replace(array_map(create_function('$a', 'return "/%\\($a\\)s/";'), array_keys($dict)), array_values($dict), $str);
 }

Μπορείτε να καλέσετε αυτόν τον τρόπο:

echo subst('The %(site)s site %(adj)s because it %(adj)s', array('site'=>'Stackoverflow', 'adj'=>'rocks'));
Απαντήθηκε 26/08/2008 στις 13:49
πηγή χρήστη

ψήφοι
4

@ Marius

Δεν ξέρω αν είναι πιο γρήγορα, αλλά μπορείτε να το κάνετε χωρίς regexes:

function subst($str, $dict)
{
  foreach ($dict AS $key, $value)
  {
    $str = str_replace($key, $value, $str);
  }

  return $str;
}
Απαντήθηκε 26/08/2008 στις 14:21
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more