Che scemo che sono, ho scritto una callback e una closure quando quello e' il comportamento di default di array_filter![]()
Che scemo che sono, ho scritto una callback e una closure quando quello e' il comportamento di default di array_filter![]()
Che significato hanno questi termini?Originariamente inviato da k.b
callback e closure
Una callback e' una funzione fatta per essere "chiamata indietro" (called back) da un altra funzione, come la funzione "definito" del mio esempio sopra che viene chiamata da array_filter().
Una closure e' un concetto un po' piu' complicato da spiegare in due righe. In sostanza e' una "first class function" (cioe' puo' essere creata a runtime, salvata in una variabile, passata come parametro, restituita come valore di ritorno e non e' identificata da un nome specifico) che puo' "contenere" delle variabili proprie di cui tiene traccia anche in successive esecuzioni. Diciamo che come idea e' simile a una versione semplificata di un oggetto.
K.B giusto per capire una cosa:
Ma la callback definito, in che modo filtra l'array passato? O meglio, come fa array_filter, a filtrare con definito solo i valori diversi da null?Codice PHP:function definito($a) {
return $a;
}
$array = array_filter($array, 'definito');
array_filter() passa alla callback i valori dell'array (uno per volta) e considera validi solo quelli per cui la funzione restituisce un valore non falso. Va bene come esempio ma e' inutile perche' mi sono perso il fatto che array_filter() agisce cosi' di default![]()
Ma qundi passando alla funzione "definito" l'array, di default fa il return SOLO dei valori diversi da NULL ?
No e' array_filter() che passa a "definito" i valori dell'array: praticamente chiama la funzione una volta per ogni valore dell'array, se la funzione ritorna un valore "vero" allora considera il valore dell'array valido e lo restituisce nella versione filtrata, se la funzione ritorna un valore falso allora lo scarta.
Vorrei continuare su questa soluzione ma purtroppo impostando un return $a != " ", al primo valore NULL si blocca e restituisce fino a qui...ma io dovrei poter continuare a scorrere l'array, sbaglio qualcosa ?!Originariamente inviato da k.b
Usando array filter:
versione PHP 5.3+Codice PHP:function definito($a) {
return $a;
}
$array = array_filter($array, 'definito');
Codice PHP:$array = array_filter($array, function($a) { return $a; });
Se non la sbrigo con l'altra funzione adottero' questa!! Intanto grazie!!Originariamente inviato da Samleo
Puoi modificare così
O usare la soluzione di k.bCodice PHP:
$new_array=array();
foreach($array as $arr)
{
if($arr!='' && $arr!=NULL)
$new_array[]=$arr;
}
print_r($new_array);
![]()
Ciao K.B. volevo chiederti se riesci ad aiutarmi su questo problema che purtroppo dopo qualche ora non sono riuscito a risolvere!!Originariamente inviato da k.b
Usando array filter:
versione PHP 5.3+Codice PHP:function definito($a) {
return $a;
}
$array = array_filter($array, 'definito');
Codice PHP:$array = array_filter($array, function($a) { return $a; });
Se faccio un print_r dell'array tutto perfetto, ma se faccio scrivere l'immagine dentro il for qualcosa non funziona come deve....ossia se $a=tizio $b=caio $c=null $d=sempronio, scrive:Codice PHP:$i = 0; $arr = array("$a", "$b", "$c", "$d");
$arr = array_filter($arr);
for($i= 0;$i<count($arr);$i++) {
echo "<img src=\"../".$arr[$i]."\" class=\"TnImage\" width=\"30%\" height=\"30%\"/>
";
echo "<input type=\"hidden\" name=\"immagine$i\" id=\"immagine$i\" value=\"../".$arr[$i]."\" />";
}
}
[0] tizio
[1] caio
e sempronio ??!! si blocca al primo null, all'inizio pensavo fosse il callback (che poi risulta inutile) e difatti come vedi nel codice l'ho tolto.....ma non capisco perche' si ferma al primo null che trova!!