Visualizza la versione completa : ricerca in array
Salve a tutti in uno script faccio una ricerca su un array per verificare la presenza di alcuni dati:
if(array_search($RecReg["IDUtente"],$refeals_save) == true) echo " select_rubric_event";
Il problema è questo che nell'array ho 4 elementi e solo dal secondo in poi mi stampa la stringa anche se il primo elemento di array esiste e ce nella ricerca non mi stampa la stringa.
Sapreste dirmi come mai?
Se stampo la ricerca mi da quello che cerco e cioè mi da 0,1,2,3 i quattro array che trova.
Ma allora perchè nella prima ricerca nonostante si true non mi stampa la stringa? :dhò: :dhò: :dhò:
Se il valore si trova come primo elemento tornerà 0 quindi verrà letto come falso, l'unica possibilità è quella se hai fatto tutto bene
Quando hai delle funzioni che possono ritornare un valore a 0, come in questo caso, nella condizione non devi usare l'operatore "==" ma "===".
Su php.net è ben evidenziata la problematica.
http://php.net/manual/en/function.array-search.php
Warning
This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
quindi devo dare identico non l'uguaglianza?
eppure RoTeam il 0 che mi da non è il false ma la chiave del primo array
o provato così:
if(array_search($RecReg["IDUtente"],$refeals_save) === true) echo " select_rubric_event";
ma così non mi da neanche gli altri 3 che prima mi dava.
Originariamente inviato da techno
quindi devo dare identico non l'uguaglianza?
eppure RoTeam il 0 che mi da non è il false ma la chiave del primo array
Non essendoci il casting, php non può sapere cosa sia quello 0, quindi lo interpreta come boleano, ovvero come false.
Edit, niente dava errore, mmm non potresti controllarlo in un altro modo? Tipo usando in_array() o tramite ciclo?
BlitzKrieg
18-09-2012, 21:05
Se provi così?
if(array_search($RecReg["IDUtente"],$refeals_save) !== false) echo " select_rubric_event";
Esatto, devi usare il "non identico" in quanto array_search se trova la chiave alla prima posizione ti ritorna un int(0) se non lo trova ti ritrona un false.
Dato che l'unica condizione negative che deve fallire è il false devi dargli la condizione negativa con l'operatore "non identico" che oltre a confrontare l'uguaglianza confronta anche il tipo.
E' un pò contorto da capire, ma nel link che ti ho passato c'erano parecchi esempi.
si BlitzKrieg era proprio questo il problema ed infatti ora funge.
Grazie raga a tutti per il vostro magnifico supporto, come sempre.