Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Confrontare due array

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    60

    Confrontare due array

    Ciao a tutti, esiste una funzione in PHP o è possibile realizzarla in grado di confrontare due array e di dare come output il primo array e mettere un "*" sui valori che trova in un secondo array.
    Mi spiego meglio:

    Ho due array:
    Codice PHP:
    $array1 = array("mela","banana","pera","arancia");
    $array2 = array("mela","pera"); 
    Dovrei ora confrontare i due array e ottenere come output tutto $array1 con segnate "mela" e "pera" con una "*".

    Cioè:
    Codice PHP:
    array {
      [
    0]=>mela*
      [
    1]=>banana
      
    [2]=>pera
      [
    3]=>arancia

    Ho provato a cercare tra le funzioni di PHP ma non mi sembra di aver trovato niente che faccia al caso mio.
    Vi ringrazio in anticipo dell'aiuto!

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    18
    Codice PHP:
    function check($array1,$array2){ 
    //ritorna gli indici dei value presenti in tutti e due gli array
    $k 0;
    $supp = array();

    for(
    $i 0$i count($array1); $i++){
        for(
    $j 0;$j count($array2); $j++){
            if(
    $array1[$i] == $array2[$j]) {
                
    $supp[$k] = $i;
                
    $k++;
                break;
        }
        
    }
    }
    return 
    $supp;
    }

    function 
    add_char($array1,$supp,$char){
    //ritorna l'array modificato con $char
        
    for($i 0;$i count($supp);$i++)
            
    $array1[$supp[$i]] = $array1[$supp[$i]] . $char;
        
        return 
    $array1;


    }


    $array1 = array("mela","banana","pera","arancia"); 
    $array2 = array("mela","pera");
    $supp check($array1,$array2);
    $array1 add_char($array1,$supp,'*');
    print_r($array1); 

    fammi sapere se non capisci qualcosa
    "The question of whether Machines
    Can Think... is about as relevant as
    the question of whether Submarines
    Can Swim." Dijkstra

  3. #3
    Utente di HTML.it L'avatar di Kups
    Registrato dal
    May 2013
    Messaggi
    20
    Ti posto una soluzione che trovo un peletto più sintetica di quella già proposta:

    Codice PHP:
    <?php

    function signArrayMatches($arrayList$arraySearch)
    {
        foreach (
    $arraySearch as $value)
        {
            if (
    in_array($value$arrayList))
            {
                
    $arrayList[array_search($value$arrayList)] .= '*';
            }
        }
        
        return 
    $arrayList;
    }


    $lista = array("mela","banana","pera","arancia");
    $ricerca = array("mela","pera");

    $ricerca signArrayMatches($lista$ricerca);


    print_r($ricerca);

    L'output prodotto è questo:
    codice:
    Array
    (
        [0] => mela*
        [1] => banana
        [2] => pera*
        [3] => arancia
    )

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    60
    Grazie mille è perfetto!

  5. #5
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Hai provato con array_diff et similia?
    Per gli Spartani e Sparta usa spartan Il mio github

  6. #6
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Giusto per giocare un altro paio di soluzioni. Queste però intercettano anche valori presenti più di una volta.

    Codice PHP:
    <?php
        
    function MarcaTrovati($lista,$ricerca){                
            foreach(
    $ricerca as $rvalue)
                foreach(
    $lista as $lkey=>$lvalue)
                    
    $lista[$lkey].=($rvalue==$lvalue?'*':'');
            return 
    $lista;
        }
        
        function 
    MarcaTrovati2($lista,$ricerca){
            
    $pos array_intersect($lista$ricerca);
            foreach(
    $pos as $key=>$value)
                
    $lista[$key].='*';
            return 
    $lista;
        }
        
        
    $lista = array("mela","banana","pera","arancia","mela");
        
    $ricerca = array("mela","pera");

        
    var_dump(MarcaTrovati($lista$ricerca)); 
        
    var_dump(MarcaTrovati2($lista$ricerca));
    ?>
    Output:
    codice:
    array (size=5)
      0 => string 'mela*' (length=5)
      1 => string 'banana' (length=6)
      2 => string 'pera*' (length=5)
      3 => string 'arancia' (length=7)
      4 => string 'mela*' (length=5)
    array (size=5)
      0 => string 'mela*' (length=5)
      1 => string 'banana' (length=6)
      2 => string 'pera*' (length=5)
      3 => string 'arancia' (length=7)
      4 => string 'mela*' (length=5)
    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.