2014-05-17 5 views
8

Wie Sie sehen können, wird dies ermüdend schreiben mehrere Schlüssel für den gleichen Wert gibt es keine Möglichkeit, die ich tun kann.Zuweisen von mehreren Schlüsseln zu gleichen Wert in Array

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

Ich versuche nur, mich einige Zeit

PHP-Klasse Funktion hundertmal hier zu retten Umschreiben:

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' 
    ); 

So würde ich brauchen um es so zu machen, dass es es dem Array hinzufügt und meine Schlüsselwerte nicht füllt w mit dem gleichen Wert, wenn sie tatsächlich nicht alle exakt gleich sind. Ich sollte dies am Anfang gesagt haben

+5

Ich würde das Array so drehen, dass "Sie sind willkommene Punkte für alle möglichen Entsprechungen, anstatt aller Äquivalente, die auf denselben Wert hinweisen. Das wird auch weniger Speicher verbrauchen. –

+0

Hmmm, ich habe ein sehr langes Array und verwende Klassen wie: siehe mein neues Update. Wir verwenden JS, um die Zeichenfolge als Algorithmus zu suchen, und analysiert dann eine Antwort mit der Standardsprache. Sie willkommen zu heißen, wird also nicht funktionieren. – EasyBB

+0

Ich sehe nichts in Ihrer Modifikation, die eine sauberere Struktur verhindert. Irgendwann machst du wahrscheinlich 'isset ($ lang [$ word])' und könntest genauso einfach die Funktion 'array_search' durchlaufen und verwenden. –

Antwort

14

Sie array_fill_keys() verwenden können:

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

Example

+2

Danke notulysses! Ich schätze es, ich lerne immer noch PHP, also sind einige dieser Funktionen neu für mich. – EasyBB

+0

@EasyBB: Ich bin froh, dir zu helfen! – potashin

+0

Eine Frage ist jedoch, gibt es eine Umkehrung davon? Weil mein Array mehr als nur diese Dankesdaten usw. ist, brauche ich es, damit ich 'array_fill_keys ($ thanks,' you william ') machen kann. 'Aber ist es möglich, dies zu tun?' Danke '=> array_fill_keys ($ thanks "Gern geschehen")? oder etwas in der Art ... – EasyBB

2

Während ich zurückhaltender bin eine Code Lösung anbieten zu können, wenn Sie zugelassen haben Sie neu in der Sprache und ich habe nur nicht gut recherchiert, ich hoffe, dass dieses Projekt mit der Sprache spielt, um es zu lernen, anstatt im Kopf herumzupreschen, um einem Klienten etwas zu geben, wo es letztendlich nicht gut abschneiden wird.

Edit: Just sah Ihre "gute Sache, ich gehe zur Hochschule für diese" und bin ich froh, dass ich zur Hilfe geschrieben.

Hier ist eine Struktur, die tut, was ich glaube, dass Sie tun möchten.

<?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'); 
?> 

Es verwendet eine Klassenstruktur mit statischer members/Methoden (also keine Instanziierung der Klasse ist erforderlich). Es ist einfach, mit einer vordefinierten Liste von Conversions zu erweitern (es ist erforderlich, zusätzliche Conversions zur Laufzeit hinzuzufügen.) Es sollte auch ziemlich schnell ausgeführt werden.

0

Ich mache es in drei Schritten:

1 - Definieren Sie eindeutige Werte

2 - Füllen Sie repetitiven Wert

3 - Union 1. und 2.

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

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

$lang += $result; 

a Haben schaue array_fill_keys und Array Operators +=