2011-05-17 5 views
7

par exemple:comment définir la valeur par défaut pour le tableau (php)

$arr = array('k1'=>1,'k2'=>2,'k3'=>3); 

Si je veux obtenir $ arr [ 'K4'] (Unexpect index), il y a un avis:

Notice: undefined index...... 

donc, je peux définir une valeur dufalut pour tableau, comme en tant que hachage de rubis:

h = {'k1'=>1,'k2'=>2,'k3'=>3} 
h.default = 'default' 
puts h['k4'] 

, je vais « par défaut »;

Répondre

8

Il suffit de faire une sorte de vérification pour voir si elle existe:

isset($arr['k4'])?$arr['k4']:'default'; 

Ou faire une fonction pour elle:

function get_key($key, $arr){ 
    return isset($arr[$key])?$arr[$key]:'default'; 
} 

//to use it: 
get_key('k4', $arr); 
+0

@psjscs pas de problème^_^n'oubliez pas de sélectionner un réponse acceptée quand vous pouvez :-D – Neal

+0

la fonction get_key est utile, merci! ~ – psjscs

5

@ La réponse de Neal est bon pour un usage générique, mais si vous avez un ensemble de touches prédéfinies qui doivent être en défaut, vous pouvez toujours fusionner le tableau avec une valeur par défaut:

$arr = $arr + array('k1' => null, 'k2' => null, 'k3' => null, 'k4' => null); 

De cette façon, si $arr définit l'une de ces clés, elle prendra de la préci- sion. Mais les valeurs par défaut seront là sinon. Cela a l'avantage de rendre les tableaux d'options faciles car vous pouvez définir différents paramètres par défaut pour chaque clé.

Modifier Ou si vous voulez rubis comme support, apparaissent juste ArrayObject à le faire pour vous:

class DefaultingArrayObject extends ArrayObject { 
    public $default = null; 
    public function __construct(array $array, $default = null) { 
     parent::__construct($array); 
     $this->default = $default; 
    } 
    public function offsetGet($key) { 
     if ($this->offsetExists($key)) { 
      return parent::offsetGet($key); 
     } else { 
      return $this->default; 
     } 
    } 
} 

Utilisation:

$array = new DefaultingArrayObject($array); 
$array->default = 'default'; 
echo $array['k4']; // 'default' 
+0

Ce n'est pas très dynamique – Neal

+0

@Neal: Ce n'est pas censé être dynamique. C'est censé être pour quand vous avez des clés spécifiques que vous attendez. Les deux ont des cas d'utilisation valides ... – ircmaxell

Questions connexes