Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581

    array_unique ... mantiene doppioni :(

    Avrei la necessità, dati 3 array, di recuperare determinati valori non ripetuti (in pratica devo ricavare eventuali dipendenze di ID da un db) ed inserirli in un array di risultati
    All'indice C posso avere dei doppioni

    Per fare un esempio vi posto il codice dove, ahimè, il risultato non è quello che mi aspetto ... non so più come fare

    Dati i 3 array:
    - se quello con chiave B non è un array, metto in tmp quello con chiave A
    - altrimenti faccio differenza tra A e B e
    -> se la diff non è array vuoto, tmp= merge A+diff
    -> altrimenti tmp= merge A+diff

    dall'esempio del codice il risultato che mi aspetto, senza doppioni, è
    codice:
    ris = array(1 => array(1,2,8), 2 => array(1,2), 3 => array(1,2), 4 => array(2,8))
    qualcuno sa dirmi dove sbaglio? a me sembra tutto ok

    Codice PHP:
    $arr1['A'] = array(2,5,7,8,9,10);    // tutti gli id (madri e figlie)
    $arr1['B'] = array(5,7,9,10);        // id con madre<>0 (figlie)
    $arr1['C'] = array(2,2,1,1);        // madre dei B    (madri delle figlie B)

    $arr2['A'] = array(7,9);
    $arr3['B'] = array(7,9);
    $arr2['C'] = array(2,1);

    $arr3['A'] = array(2,7,9);
    $arr3['B'] = array(7,9);
    $arr3['C'] = array(2,1);

    $arr4['A'] = array(2,8);

    for(
    $x=$x<=$x++){
        unset(
    $tmpDiff);
        unset(
    $tmpSum);
        if(!
    is_array(${'arr'.$x}['B']))
            
    $tmpSum = ${'arr'.$x}['A'];
        else{
            
    array_unique(${'arr'.$x}['C']);
            
    $tmpDiff array_diff(${'arr'.$x}['A'], ${'arr'.$x}['B']);
            
    $tmpSum array_merge(${'arr'.$x}['C'], empty($tmpDiff) ? ${'arr'.$x}['A'] : $tmpDiff);
        }
        
    array_unique($tmpSum);
        
    sort($tmpSum);
        
    $res[$x] = $tmpSum;
    }

    print 
    "<pre>";
    print_r($res);
    print 
    "</pre>"
    grazie mille!!

    edit: scusate ho corretto il codice che avevo copiato una porzione sbagliata

  2. #2
    Utente di HTML.it L'avatar di Fichico
    Registrato dal
    Nov 2002
    residenza
    Bologna
    Messaggi
    581
    ok .. sono un pirla e sono cotto ... ho risolto

    quando facevo array_unique non eguagliavo la funzione allo stesso array!!
    facevo array_unique($arr) .. anzichè $arr=array_unique($arr)


  3. #3
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497

    Re: array_unique ... mantiene doppioni :(

    Originariamente inviato da Fichico
    Avrei la necessità, dati 3 array, di recuperare determinati valori non ripetuti (in pratica devo ricavare eventuali dipendenze di ID da un db) ed inserirli in un array di risultati
    All'indice C posso avere dei doppioni

    Per fare un esempio vi posto il codice dove, ahimè, il risultato non è quello che mi aspetto ... non so più come fare

    Dati i 3 array:
    - se quello con chiave B non è un array, metto in tmp quello con chiave A
    - altrimenti faccio differenza tra A e B e
    -> se la diff non è array vuoto, tmp= merge A+diff
    -> altrimenti tmp= merge A+diff

    dall'esempio del codice il risultato che mi aspetto, senza doppioni, è
    codice:
    ris = array(1 => array(1,2,8), 2 => array(1,2), 3 => array(1,2), 4 => array(2,8))
    qualcuno sa dirmi dove sbaglio? a me sembra tutto ok

    Codice PHP:
    // Mancano le dichiarazioni iniziali
    $arr1 = array();
    $arr2 = array();
    $arr3 = array();
    $arr4 = array();

    // solitamente si indica padre-figlio ..... perche' al femminile ? 
    $arr1['A'] = array(2,5,7,8,9,10);    // tutti gli id (madri e figlie)
    $arr1['B'] = array(5,7,9,10);        // id con madre<>0 (figlie)
    $arr1['C'] = array(2,2,1,1);        // madre dei B    (madri delle figlie B)


    $arr2['A'] = array(7,9);
    $arr3['B'] = array(7,9); // Perche' array 3 ????? 
    $arr2['C'] = array(2,1);


    $arr3['A'] = array(2,7,9);
    $arr3['B'] = array(7,9); // hai ridefinito arr3[b] come sopra ripetizione o svista sopra ? 
    $arr3['C'] = array(2,1);

    $arr4['A'] = array(2,8);


    // Qui mi fermo ....
    // ma ti consiglio di usare opportunamente le funzioni array_diff etc... facendo cmq
    // molt attenzione a come stai definendo il tutto ... che alla fine hai array di array 
    // sono quasi delle matrici queste cose 

    for($x=$x<=$x++){
        unset(
    $tmpDiff);
        unset(
    $tmpSum);
        if(!
    is_array(${'arr'.$x}['B']))
            
    $tmpSum = ${'arr'.$x}['A'];
        else{
            
    array_unique(${'arr'.$x}['C']);
            
    $tmpDiff array_diff(${'arr'.$x}['A'], ${'arr'.$x}['B']);
            
    $tmpSum array_merge(${'arr'.$x}['C'], empty($tmpDiff) ? ${'arr'.$x}['A'] : $tmpDiff);
        }
        
    array_unique($tmpSum);
        
    sort($tmpSum);
        
    $res[$x] = $tmpSum;
    }

    print 
    "<pre>";
    print_r($res);
    print 
    "</pre>"
    grazie mille!!

    edit: scusate ho corretto il codice che avevo copiato una porzione sbagliata

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.