2014-05-17 20 views
8
$lang = array(
     'thank you'=>'You are welcome', 
     'thanks'=>'You are welcome', 
     'thank ya'=>'You are welcome' 
    ); 

Come potete vedere questo sta per arrivare fastidiose scrittura chiavi multiple per lo stesso valore c'è un modo che io possa fare.assegnare più chiavi per lo stesso valore in serie

$lang['thanks']=>$lang['thank ya']=>$lang['thank you'] 

Sto solo cercando di salvare me stesso un po 'di tempo qui da riscrivere cento volte

funzione di classe PHP:

function fetch_key($key, $l,$bool){ 
    $dynamic = new l18n; 
    if($bool == true or is_null($bool)){ 
     return addslashes($dynamic->convert($key,$l)); 
    }else{ 
     return $dynamic->convert($key,$l); 
    } 
    } 

EX

$lang = array(
     'thank you'=>'You are welcome', 
     'thanks'=>'You are welcome', 
     'thank ya'=>'You are welcome', 
     'hello'=>'hello', 
     'goodbye'=>'goodbye' 
    ); 

Così avrei bisogno per farlo in modo che lo aggiunga all'array e non riempia i miei valori chiave w Con lo stesso valore quando in realtà non sono esattamente gli stessi. Avrei dovuto affermato questo in principio

+5

Vorrei capovolgere la matrice in modo che "Tu" sono i punti benvenuti a tutti gli equivalenti possibili invece di tutti gli equivalenti che puntano allo stesso valore. Ciò userà anche meno memoria. –

+0

Hmmm vedo che ho un array molto lungo, e uso classi come: vedi il mio nuovo aggiornamento. usiamo JS per cercare la stringa come un algoritmo e quindi analizza una risposta con la lingua predefinita. Quindi farti piacere non funzionerà. – EasyBB

+0

Non vedo nulla nella modifica che impedisce una struttura più pulita. Ad un certo punto probabilmente stai facendo 'isset ($ lang [$ word])' e potresti altrettanto facilmente scorrere e usare la funzione 'array_search'. –

risposta

14

È possibile utilizzare array_fill_keys():

$keys = array('thank you','thanks','thank ya'); 
$lang = array_fill_keys($keys, 'You are welcome'); 

Example

+2

Grazie notulysses! Lo apprezzo, sto ancora imparando php quindi alcune di queste funzioni sono nuove per me. – EasyBB

+0

@ EasyBB: Felice di aiutarti! – potashin

+0

Una domanda è che ci sono inversioni di questo? Perché il mio array è più che solo questi ringraziamenti ecc. Ne ho bisogno quindi posso fare 'array_fill_keys ($ grazie, 'sei il benvenuto');' ma è possibile farlo ''thanks' => array_fill_keys ($ grazie 'sei il benvenuto') '? o qualcosa del genere ... – EasyBB

2

Mentre sono reticenti a offrire una soluzione di codice quando hai ammesso siete nuovi alla lingua e semplicemente non ho studiato bene, spero che questo progetto stia giocando con il linguaggio per impararlo, piuttosto che saltare in testa prima per dare qualcosa ad un cliente dove alla fine non andrà bene.

Modifica: Ho appena visto la tua "cosa buona che sto andando al college per questo" e sono contento di aver pubblicato per aiutare.

Ecco una struttura che fa ciò che credo tu stia cercando di fare.

<?php 
class StandardizeSayings { 
    public static $CONVERSIONS = array(
    'You are welcome' => array(
     'thank you', 
     'thanks', 
     'thank ya' 
    ), 
    'Hello' => array('hello'), 
    'Goodbye' => array('goodbye', 'good bye') 
); 

    public static function getStandardization($word) { 
    $word_lowercase = strtolower($word); 
    foreach (StandardizeSayings::$CONVERSIONS as $conversion=>$equivalents) { 
     if (array_search($word_lowercase, $equivalents) !== false) { 
     return $conversion; 
     } 
    } 
    return ''; 
    } 
} 

echo StandardizeSayings::getStandardization('thank ya'); 
?> 

Si utilizza una struttura di classe con i membri statici/metodi (quindi non è necessario istanza della classe). È facile estendere con un elenco predefinito di conversioni (è necessario del lavoro per aggiungere ulteriori conversioni in fase di runtime). Dovrebbe anche essere eseguito abbastanza velocemente.

0

lo faccio in tre fasi:

1 - Definire i valori unici

2 - Riempire valore ripetitivo

3 - Unione 1. e 2.

$lang = array(
    'hello'=>'hello', 
    'goodbye'=>'goodbye' 
); 

$keys = array('thank you','thanks','thank ya'); 
$result = array_fill_keys($keys, 'You are welcome'); 

$lang += $result; 

avere un guarda array_fill_keys e Array Operators +=