2011-05-17 21 views
7

por ejemplo:cómo establecer el valor por defecto para array (php)

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

si quiero conseguir [ 'k4'] (Unexpect índice) $ matriz, hay un aviso:

Notice: undefined index...... 

por lo tanto, puedo establecer un valor dufalut para la matriz, al igual que como hash del rubí:

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

a continuación, voy a conseguir 'por defecto';

Respuesta

8

Sólo hacer algún tipo de comprobación para ver si existe:

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

o hacer una función para la que:

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

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

@psjscs no hay problema^_^recuerde seleccionar una respuesta aceptada cuando puede :-D – Neal

+0

la función get_key es útil, ¡gracias! ~ – psjscs

5

@ respuesta de Neal es bueno para uso genérico, pero si usted tiene un conjunto predefinido de teclas que deben ser omitido, siempre se puede combinar la matriz con un defecto:

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

De esta manera, si $arr define cualquiera de esas claves, tomará precidence. Pero los valores predeterminados estarán ahí si no. Esto tiene la ventaja de hacer que las matrices de opciones sean fáciles, ya que puede definir diferentes valores predeterminados para cada tecla.

Editar O si desea rubí como soporte, simplemente extender ArrayObject que lo haga por usted:

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; 
     } 
    } 
} 

Uso:

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

Esto no es muy dinámico – Neal

+0

@Neal: no se supone que sea dinámico. Se supone que es para cuando tienes claves específicas que estás esperando. Ambos tienen casos de uso válidos ... – ircmaxell

Cuestiones relacionadas