Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Modificare un array

  1. #1

    Modificare un array

    Raga ho un problema con gli array, vi spiego:

    con una query ottengo un array di questo genere:
    Codice PHP:
    [0]=>A
    [1]=>B
    [2]=>C
    [3]=>
    con un'altra query ottengo questo secondo array:
    Codice PHP:
    [0]=>C
    [1]=>
    ora il mio problema è che devo trasformare il secondo array cosi:
    Codice PHP:
    [0]=>(zero)
    [
    1]=>(zero)
    [
    2]=>C
    [3]=>
    in poche parole i valori del secondo array devono andare agli stessi indici del primo array.

    Come si fa?

  2. #2
    puoi fare così:

    Codice PHP:
    $array1//Qui c'è il primo array
    $array2//Qui c'è il secondo array

    $newArray = array(); //Qui salverò il secondo array modificato

    for(0count($array1); i++)
       
    $newArray[] = 0;

    foreach(
    $array2 as $value2)
    {
       foreach(
    $array1 as $key => $value)
       {
           if(
    $value2 == $value)
              
    $newArray[$key] = $value;
       }

    Dovrebbe andare
    I DON'T Double Click!

  3. #3
    sei un grande, non ci sarei mai arrivato

    grazie

  4. #4
    Un altra soluzione
    Codice PHP:
    <?php
    $array1 
    = array("A""B""C""D");
    $array2 = array("C""D");

    $new array_intersect($array1$array2);
    $num count($array1);

    for(
    $i 0$i $num$i++)
    {
        if(!
    array_key_exists($i$new))
        {
            
    $new[$i] = 0;
        }
    }

    ksort($new);

    print 
    "<pre>";
    print_r($new);
    print 
    "</pre>";
    ?>

  5. #5
    e se il problema si presenta al contrario?
    Codice PHP:
    $array1=array('a'=>0,'b'=>0,'c'=>0,'d'=>0); //Qui c'è il primo array 
    $array2=array('c'=>1000,'d'=>2000); //Qui c'è il secondo array 
    devo ottenere
    Codice PHP:
    $newArray = array('a'=>0,'b'=>0,'c'=>1000,'d'=>2000); 

  6. #6
    Codice PHP:
    <?php
    $array1 
    = array('a'=>0,'b'=>0,'c'=>0,'d'=>0); //Qui c'è il primo array
    $array2 = array('c'=>1000,'d'=>2000); //Qui c'è il secondo array

    $new array_intersect_key($array2$array1);

    foreach(
    array_keys($array1) as $key)
    {
        if(!
    array_key_exists($key$new))
        {
            
    $new[$key] = 0;
        }
    }

    ksort($new);

    print 
    "<pre>";
    print_r($new);
    print 
    "</pre>";
    ?>
    Oppure puoi provare una soluzione del genere

    Codice PHP:
    <?php
    $array1 
    = array('a'=>0,'b'=>0,'c'=>0,'d'=>0); //Qui c'è il primo array
    $array2 = array('c'=>1000,'d'=>2000); //Qui c'è il secondo array

    $new array_merge($array1$array2);

    print 
    "<pre>";
    print_r($new);
    print 
    "</pre>";
    ?>

  7. #7
    array merge funziona benissimo, grazie

    tutto questo problema nasce dal fatto che devo utilizzare phpgraphlib.

    devo creare l'array completo che sarà l'asse x, poichè non tutti i dati che devo rappresentare hanno dei valori per ogni categoria, quindi a quelli che non hanno valore assegno zero.
    In questo modo però posso creare solo un grafico a barre e non a linee (a meno che al posto dello zero riuscissi ad assegnare un valore medio tra i due adiacenti).

    Mi piacerebbe sapere se altri hanno avuto lo stesso problema e per che soluzione hanno optato.

    P.s. ho dato per scontato che sto parlando di grafici che devono rappresentare diverse serie insieme e non una.

  8. #8
    rieccomi con un caso ancora più complicato (spero sia l'ultimo):

    Codice PHP:
    Array1
    (
        [
    A] => Array
            (
                [
    AA] => 0
                
    [BB] => 0
                
    [CC] => 0
                
    [DD] => 0
            
    )
     
        [
    B] => Array
            (
                [
    AA] => 0
                
    [BB] => 0
                
    [CC] => 0
                
    [DD] => 0
            
    )
    )

    Array2
    (
        [
    A] => Array
            (
                [
    BB] => 20
                
    [CC] => 30
            
    )
     
        [
    B] => Array
            (
                [
    AA] => 10
                
    [BB] => 40
            
    )
    )

    Array3 //che deve essere il risultato tra il primo e il secondo
    (
        [
    A] => Array
            (
                [
    AA] => 0
                
    [BB] => 20
                
    [CC] => 30
                
    [DD] => 0
            
    )
     
        [
    B] => Array
            (
                [
    AA] => 10
                
    [BB] => 40
                
    [CC] => 0
                
    [DD] => 0
            
    )

    ho provato con array_merge ma non ottengo il risultato voluto.
    Ho provato con array_merge_recursive ma ottengo entrambi i risultati al 'terzo livello'.

    Come posso fare?

  9. #9
    Se sai già che gli indici principali (A e B) sono uguali in entrambi gli array puoi provare una soluzione del genere
    Codice PHP:
    <?php
    $array1 
    = array('A'=> array("AA" => 0,
                                
    "BB" => 0,
                                
    "CC" => 0,
                                
    "DD" => 0),
                    
    'B'=> array("AA" => 0,
                                
    "BB" => 0,
                                
    "CC" => 0,
                                
    "DD" => 0));
                                
    $array2 = array('A'=> array("BB" => 20,
                                
    "CC" => 30),
                    
    'B'=> array("AA" => 10,
                                
    "BB" => 40));


    foreach(
    $array1 as $index => $array)
    {
        
    $array3[$index] = array_merge($array1[$index], $array2[$index]);
    }

    print 
    "<pre>";
    print_r($array3);
    print 
    "</pre>";
    ?>

  10. #10
    grazie, funziona perfettamente!!

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.