Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Eliminare valori nulli creati da array_unique

    Salve, ho un array con i seguenti valori: (i valori sono stati messi senza apici soltanto a scopo di mostrare il contenuto dell'array)
    $id[0]=1
    $id[1]=1
    $id[2]=1
    $id[3]=1
    $id[4]=2
    $id[5]=2

    Volevo eliminare i doppioni e ho utilizzato il comando array_unique come segue:
    $id=array_unique($id);
    Il risultato è il seguente:
    $id[0]=1
    $id[1]=
    $id[2]=
    $id[3]=
    $id[4]=2
    $id[5]=

    Vorrei che dall'array venissero eliminati i valori nulli avendo come risultato:
    $id[0]=1
    $id[1]=2

    Volevo chiedere se c'è un comando per avere il risultato richiesto o devo creare un array nuovo ed utilizzare un ciclo per trasferire i valori non nulli dal vecchio array a quello nuovo.
    Grazie mille.
    Mariastella

  2. #2
    è un lavoro che dovrebbe già fare la funzione che utilizzi: array_unique. Guarda gli esempi qui:

    http://php.net/manual/en/function.array-unique.php

    questo codice funziona perfettamente:

    Codice PHP:

    $id
    [0]=1;
    $id[1]=1;
    $id[2]=1;
    $id[3]=1;
    $id[4]=2;
    $id[5]=2;

    $clean array_unique($id);
    var_dump($clean); 
    il risultato del var_dump è infatti :

    array(2) { [0]=> int(1) [4]=> int(2) }

  3. #3
    Scusami purtroppo non sono molto pratica in php.
    In effetti quello che dici tu è giusto ma come vedi mi mancano le chiavi centrali ossia:
    $clean[1]
    $clean[2]
    $clean[3]
    $clean[5]
    li dovrei eliminare dall'array.

    vorrei avere qualcosa del genere:
    array(2) { [0]=> int(1) [1]=> int(2) }
    E' possibile?

  4. #4
    cerco di spiegarmi meglio: la funzione che vuoi utilizzare array_unique crea un array con tutti i valori contenuti una sola volta eliminando le copie. Se vuoi appunto ottenere qualcosa del genere:

    array(2) { [0]=> int(1) [1]=> int(2) }

    devi semplicemente fare questa chiamata:

    Codice PHP:
    $id[0]=1;
    $id[1]=1;
    $id[2]=1;
    $id[3]=1;
    $id[4]=2;
    $id[5]=2;

    $clean array_unique($id); 
    a questo punto $clean contiene un array copia del precedente al quale però sono stati tolti i doppioni. $clean conterrà pertanto i valori del precedente array presi SOLO UNA VOLTA: non ci sono valori vuoti o nulli. Se infatti fai una stampa di $clean vedrai che nel caso di esempio avrà solamente due elementi di valore 1 e 2, non ci saranno elementi vuoti o nulli.

    EDIT: le chiavi in più vengono eliminate automaticamente

  5. #5
    Non voglio essere ostinata ma a me le chiavi in più non vengono eliminate.
    Ecco la stampa dell'array
    array(2) { [0]=> string(1) "1" [5]=> string(1) "2" } var_dumpArray

    come vedi ho le chiavi [0] e [5] con i valori presi una sola volta.
    Non mi spiego come mai.
    Purtroppo devo creare un ciclo for fino alla lunghezza dell'array che nel mio caso risulta essere 2, in questo caso mi salta la chiave [5] ecco perchè cerco una soluzione.
    Ho consultato il sito internet che mi hai gentilmente dato, in fondo alla pagina c'è lo stesso mio problema ma non mi pare abbiamo messo una soluzione.
    in fonto si vede che se fa un ciclo fino al count(array) ossia 3, salta gli ultimi valori.
    Posto la parte dell'articolo in inglese sperando che si possa risolvere il problema.
    Grazie.

    It seems that array_unique creates an exact copy of the original array and then elimitates duplicate values. It does NOT change the "internal references" of the array. For example:

    <?php
    $test_alfa = array();
    $test_alfa[0] = "aa";
    $test_alfa[1] = "aa";
    $test_alfa[2] = "aa";
    $test_alfa[3] = "bb";
    $test_alfa[4] = "aa";
    $test_alfa[5] = "bb";
    $test_alfa[6] = "cc";
    $test_alfa[7] = "bb";

    $test_beta= array_unique($test_alfa);
    $numValues = count($test_beta);
    for ($i = 0 ; $i <= 7 ; $i++)
    echo("test_beta[$i] = $test_beta[$i]
    ");
    echo ("Number of elements in test_beta = $numValues ");
    ?>
    will give you the following output:

    test_beta[0] =
    test_beta[1] = aa
    test_beta[2] =
    test_beta[3] =
    test_beta[4] =
    test_beta[5] = bb
    test_beta[6] = cc
    test_beta[7] =
    Number of elements in test_beta = 3

    The point is that you won't get the output you'd expect if you think that the values of the non duplicate elements are located in the first three array locations.

    <?php
    $numValues = count($test_beta);
    for ($i=0;$i<=$numValues; $i++)
    echo("test_beta[$i] = $test_beta[$i]
    ");
    echo ("Number of elements in test_beta = $numValues ");
    ?>

    will give you:

    test_beta[0] =
    test_beta[1] = aa
    test_beta[2] =
    Number of elements in test_beta = 3

    Hope that saves u some debugging time!

  6. #6
    ok ora mi è chiaro cosa intendi!

    prova con questa:

    array_values()

    DOPO aver utilizzato array_unique

  7. #7

    Ok

    Ok. Funziona benissimo, ho risolto un bel problema.
    Grazie mille.
    M.

  8. #8

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.