2012-06-22 19 views
10

Se ho un array:ottenere il primo valore non nullo da array PHP

Array 
(
    [0] => 
    [1] => a 
    [2] => b 
    [3] => c 
) 

E voglio ottenere il primo valore non nullo dalla matrice, in questo caso "a". Come potrei fare qualcosa di bello e facile?

+0

dal piacevole e facile, volevo dire un approccio a breve. –

risposta

32

Non sei sicuro di piacevole e facile. Ma un approccio di breve potrebbe essere:

$first = current(array_filter($sparse_array)); 

Dove array_filter vi estrarre i "truthy" valori, saltando così le voci vuote e false. Mentre current ti dà semplicemente la prima di quelle voci rimanenti.

+2

Purtroppo, "truthy" filtra anche stringhe vuote, falsi booleani e zeri numerici ... altrimenti la soluzione migliore se l'OP vuole quella logica –

+1

Potrebbe anche aggiungere un callback personalizzato a 'array_filter()' per filtrare esplicitamente 'null' valori. Anche solo una nota, 'current()' si aspetta che il suo parametro sia passato per riferimento, quindi attualmente questo emetterebbe un avviso/avvertimento "standard severi". – nickb

+0

In alternativa alle varie interpretazioni della verità, è possibile applicare una funzione di decisione: '... (array_filter ($ arr," strlen "))' – mario

2

Beh, si potrebbe provare questo:

foreach($array as $x) { 
    if($x) break; 
} 
if($x) { 
    // $x is the first non-null value 
} 
else { 
    // There were no non-null values 
} 
3
function getFirstNotNull($array) { 
    foreach($array as $val) { 
     if(!is_null($val) || !$val) return $val; 
    } 
} 
+0

Nella seconda riga deve essere '$ array' not' $ arrea'. –

4
function get_first_not_null($array){ 
    foreach($array as $v){ 
    if($v !== null){ 
     return $v; 
    } 
    } 
    return null; 
} 
3
$res = null; 
foreach ($arr as $v) { 
    if ($v !== null) { 
     $res = $v; 
     break; 
    } 
} 
+0

Più codice che la soluzione di Mario, ma senza dubbio gira più velocemente - e catturerà anche valori "falsi" non nulli. – Blazemonger

1

userei array_reduce

$firstNonNull = array_reduce($array, function($v, $w) { 
    return $v ? $v : (isset($w) ? $w : FALSE); 
}); 
Problemi correlati