Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Problema con Array

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    139

    Recuperare dati da un array con confronto senza cicli

    Ho un'array di questo tipo e devo prelevare dei valori:

    codice:
    $co = array( 
    "a" => array("1","0"),
    "b" => array("0","1"),
    "c" => array("5","2"),
    "d" => array("7","3"),
    "e" => array("9","4"),
    "f" => array("13","5"),
    "g" => array("15","6"),
    "h" => array("17","7"),
    "i" => array("19","8"),
    "j" => array("21","9"),
    "k" => array("2","10"),
    "l" => array("4","11"),
    "m" => array("18","12"),
    "n" => array("20","13"),
    "o" => array("11","14"),
    "p" => array("3","15"),
    "q" => array("6","16"),
    "r" => array("8","17"),
    "s" => array("12","18"),
    "t" => array("14","19"),
    "u" => array("16","20"),
    "v" => array("10","21"),
    "w" => array("22","22"),
    "x" => array("25","23"),
    "y" => array("24","24"), 
    "z" => array("23","25"),
    "0" => array("1","0"),
    "1" => array("0","1"),
    "2" => array("5","2"),
    "3" => array("7","3"),
    "4" => array("9","4"),
    "5" => array("13","5"),
    "6" => array("15","6"),
    "7" => array("17","7"),
    "8" => array("19","8"),
    "9" => array("21","9")
    );
    
    $dispx = 'c';
    
    foreach( $co as $chiave  => $valore ) {
    if ($chiave == $dispx){ 
    echo $controllo[$chiave][0];
    }}


    Dovrebbe stampare a video il valore 5 invece esce il valore 51 perchè?

  2. #2
    Così è troppo semplice?

    Codice PHP:
    <?php
    $co 
    = array( 
    "a" => array("1","0"),
    "b" => array("0","1"),
    "c" => array("5","2"),
    "d" => array("7","3"),
    "e" => array("9","4"),
    "f" => array("13","5"),
    "g" => array("15","6"),
    "h" => array("17","7"),
    "i" => array("19","8"),
    "j" => array("21","9"),
    "k" => array("2","10"),
    "l" => array("4","11"),
    "m" => array("18","12"),
    "n" => array("20","13"),
    "o" => array("11","14"),
    "p" => array("3","15"),
    "q" => array("6","16"),
    "r" => array("8","17"),
    "s" => array("12","18"),
    "t" => array("14","19"),
    "u" => array("16","20"),
    "v" => array("10","21"),
    "w" => array("22","22"),
    "x" => array("25","23"),
    "y" => array("24","24"), 
    "z" => array("23","25"),
    "0" => array("1","0"),
    "1" => array("0","1"),
    "2" => array("5","2"),
    "3" => array("7","3"),
    "4" => array("9","4"),
    "5" => array("13","5"),
    "6" => array("15","6"),
    "7" => array("17","7"),
    "8" => array("19","8"),
    "9" => array("21","9")
    );

    $dispx 'c';

    echo 
    $co[$dispx][0];
    ?>
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    139
    Recuperare dati da un array e fare il confronto senza cicli.

    Grazie!

  4. #4
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Negli array PHP, la chiave numeriche s'impone su quella stringa, nel senso che, se definisci un array come

    Codice PHP:
    $arr=array("0"=>"Hello","1"=>"world","3"=>"!"); 
    PHP non cosidera le chiavi come stringa ma le memorizza come numeri interi. Ciò è vero fin tanto che la conversione in int non causa perdita d'informazione. Quindi PHP interpreta

    Codice PHP:
    $arr=array(0=>"Hello",1=>"world",3=>"!"); 
    Questo significa che il tuo array ha chiavi miste: una parte sono stringhe (le lettere) ed una parte interi (le cifre).

    Nel momento in cui confronti una stringa con un intero, PHP converete automaticamente la stringa in intero ed effettua il confronto fra i due.

    Conseguenza di ciò è che quando hai $dispx che vale "c" e $chiave che vale "c" visualizzi il 5 ossia $dispx['c'][0].

    Ma visualizzi anche $dispx['0'][0] che vale 1 perchè $chiave non è la stringa "0", come pensi tu, ma è l'intero 0 per quanto detto prima sugli array. Dato che 'c' convertito in int da PHP vale 0, si ha $dispx==$chiave equivalente a 0==0 che è true. Ecco perchè visualizzi anche la cifra 1

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  5. #5
    Puoi risolvere così:

    Codice PHP:
    ...
    if (
    $chiave === $dispx) { 
    ... 
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Basta ricrodarsi che gli indici a numero sono numerici e quelli stringa sono stringhe, altrimenti con l'operatore === che richiede uguaglianza di valore e tipo, se assengi $dispx='0'; non trovi nulla.

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

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 © 2025 vBulletin Solutions, Inc. All rights reserved.