Visualizzazione dei risultati da 1 a 10 su 10

Discussione: ricerca in array

  1. #1

    ricerca in array

    Salve a tutti in uno script faccio una ricerca su un array per verificare la presenza di alcuni dati:

    Codice PHP:
    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?

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Se il valore si trova come primo elemento tornerà 0 quindi verrà letto come falso, l'unica possibilità è quella se hai fatto tutto bene

  3. #3
    Utente di HTML.it L'avatar di Ranma2
    Registrato dal
    Mar 2003
    Messaggi
    2,647
    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.

  4. #4
    quindi devo dare identico non l'uguaglianza?

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

  5. #5
    o provato così:

    Codice PHP:
    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.

  6. #6
    Utente di HTML.it L'avatar di Ranma2
    Registrato dal
    Mar 2003
    Messaggi
    2,647
    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.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Edit, niente dava errore, mmm non potresti controllarlo in un altro modo? Tipo usando in_array() o tramite ciclo?

  8. #8
    Se provi così?

    codice:
    if(array_search($RecReg["IDUtente"],$refeals_save) !== false) echo " select_rubric_event";

  9. #9
    Utente di HTML.it L'avatar di Ranma2
    Registrato dal
    Mar 2003
    Messaggi
    2,647
    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.

  10. #10
    si BlitzKrieg era proprio questo il problema ed infatti ora funge.
    Grazie raga a tutti per il vostro magnifico supporto, come sempre.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.