PDA

Visualizza la versione completa : ricerca in array


techno
18-09-2012, 19:25
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ò:

RoTeam
18-09-2012, 19:49
Se il valore si trova come primo elemento tornerà 0 quindi verrà letto come falso, l'unica possibilità è quella se hai fatto tutto bene

Ranma2
18-09-2012, 19:58
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.

techno
18-09-2012, 20:38
quindi devo dare identico non l'uguaglianza?

eppure RoTeam il 0 che mi da non è il false ma la chiave del primo array

techno
18-09-2012, 20:39
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.

Ranma2
18-09-2012, 20:42
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.

RoTeam
18-09-2012, 20:51
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";

Ranma2
18-09-2012, 21:22
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.

techno
19-09-2012, 09:03
si BlitzKrieg era proprio questo il problema ed infatti ora funge.
Grazie raga a tutti per il vostro magnifico supporto, come sempre.

Loading