2012-10-14 13 views
52

Non riesco a trovare alcun esempio, nei libri o sul web, descrivendo come si inizializza correttamente un array associativo solo per nome (con valori vuoti) - a meno che, ovviamente, questo è il modo correttoInizializzazione di una matrice associativa con nomi di chiave ma valori vuoti

E 'appena sente come se c'è un altro modo più efficiente per fare questo (?):

config.php

class config { 
    public static $database = array (
     'dbdriver' => '', 
     'dbhost' => '', 
     'dbname' -> '', 
     'dbuser' => '', 
     'dbpass' => '' 
    ); 
} 

// Is this the right way to initialize an Associative Array with blank values? 
// I know it works fine, but it just seems ... longer than necessary. 

index.php

require config.php 

config::$database['dbdriver'] = 'mysql'; 
config::$database['dbhost'] = 'localhost'; 
config::$database['dbname'] = 'test_database'; 
config::$database['dbuser'] = 'testing'; 
config::$database['dbpass'] = '[email protected]$$w0rd'; 

// This code is irrelevant, only to show that the above array NEEDS to have Key 
// names, but Values that will be filled in by a user via a form, or whatever. 

Qualunque consigli, suggerimenti, o la direzione sarebbe apprezzato. Grazie.

+0

Ehi, non è importante, ma che hai scritto 'dbname' -> '' in cui avrebbe dovuto essere 'dbname' => ' '- Non ho abbastanza reputazione per apportare la modifica. – Martha

risposta

47

Quello che hai è l'opzione più chiara.

Ma si potrebbe accorciare utilizzando array_fill_keys, in questo modo:

$database = array_fill_keys(
    array('dbdriver', 'dbhost', 'dbname', 'dbuser', 'dbpass'), ''); 

Ma se l'utente deve riempire i valori in ogni caso, si può semplicemente lasciare la matrice vuota, e basta fornire il codice di esempio in indice. php. Le chiavi verranno automaticamente aggiunte quando si assegna un valore.

+0

Tuttavia, è necessario farlo al di fuori della classe, poiché non è possibile chiamare alcuna funzione nelle dichiarazioni delle variabili di classe. Questo * può * risultare in più codice, o codice di inizializzazione che appare in luoghi dove non ti aspetti di vederlo. – BoltClock

+0

Questo è quello che stavo cercando! Grazie! – NYCBilly

+0

@BoltClock Sì, non sceglierei comunque questa opzione. Quei caratteri in più necessari per l'inizializzazione dell'array 'normale' mi rendono molto più chiaro il codice. Lo lascerei così com'è. Mostrando solo che se vuoi, ci sono modi per farlo. :) Si potrebbe fare questo in un costruttore, ma non per una classe statica, ovviamente. – GolezTrol

1

primo file:

class config { 
    public static $database = array(); 
} 

altro file:

config::$database = array(
    'driver' => 'mysql', 
    'dbhost' => 'localhost', 
    'dbname' => 'test_database', 
    'dbuser' => 'testing', 
    'dbpass' => '[email protected]$$w0rd' 
); 
+0

Questo è hard coded, il mio secondo file era solo un esempio: avevo bisogno delle chiavi già definite. – NYCBilly

Problemi correlati