copia di un array

« Older   Newer »
 
  Share  
.
  1. Samus89
     
    .

    User deleted


    Vi pongo questo quesito perché per quanto banale non riesco proprio ad arrivarci -.-
    in pratica devo ordinare un array in ordine crescente mantenendo però gli indici (le chiavi) originari, per fare ciò devo copiare l'array e modificare l'array copiato senza modificare quello originario.
    Il problema è che non ho idea di come copiare l'array, il codice sull'ordinamento che ho scritto (mi è stato chiesto di farlo senza utilizzare le funzioni di ordinamento di php) è questo :
    <?php

    $arr=array(67,32,1,87,88,-3,123,565,-32,45,99,16,78,43,-638,33,61,90,0,12);
    for($a = 0; $a < count($arr); $a++) {
    for($b = 0; $b < count($arr); $b++) {
    if($arr[$a] < $arr[$b]) {
    $temp = $arr[$a];
    $arr[$a] = $arr[$b];
    $arr[$b] = $temp;
    }
    }
    }
    print_r($arr);


    ?>
    ho provato a scrivere $vettore=$array; ma immagino non sia il modo giusto per copiare un array, potete darmi una mano?
     
    Top
    .
  2.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Se ho capito bene è questo ciò che vuoi fare:

    CODICE
    <?php

    $arr  = array(67,32,1,87,88,-3,123,565,-32,45,99,16,78,43,-638,33,61,90,0,12);
    $arr1 = array();

    // copia array
    for($i=0; $i<count($arr); $i++)
    {
     $arr1[$i] = $arr[$i];
    }

    // Ordinamento nuovo array
    for($i = 0; $i<count($arr1); $i++)
    {
     for($j = $i+1; $j<count($arr1); $j++)
     {
       if($arr1[$i] > $arr1[$j])
       {
         $temp = $arr1[$i];
         $arr1[$i] = $arr1[$j];
         $arr1[$j] = $temp;
       }
     }
    }

    echo("Vecchio array:<br>");
    print_r($arr);
    echo("<br>Nuovo array:<br>");
    print_r($arr1);

    ?>
     
    Top
    .
  3. Samus89
     
    .

    User deleted


    No, in pratica dovrei fare quello che fa la funzione asort ma senza utilizzarla, in pratica su un array ad esempio: $a = array(9,4,2,7,5); il risultato dovrebbe essere
    [2] => 2
    [1] => 4
    [4] => 5
    [3] => 7
    [0] => 9
    è una cosa che proprio non mi riesce =( ho parecchie difficoltà con gli array
     
    Top
    .
  4. Guglielmoqwerty
     
    .

    User deleted


    Umm. Scusa ma non capisco. Perchè nell'esempio
    [2] => 2
    [1] => 4
    [4] => 5
    [3] => 7
    [0] => 9
    li metti in quell'ordine e non
    [4] => 5
    [3] => 7
    [2] => 2
    [1] => 4
    [0] => 9
    ?
     
    Top
    .
  5.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Perché l'ordine è dei valori, non delle chiavi.
    Non conoscendo bene PHP dovrei smanettare un po per riuscire ad implementarlo...
     
    Top
    .
  6. Samus89
     
    .

    User deleted


    Risolto, ecco il codice:
    $arr = array(67,32,1,87,88,-3,123,565,-32,45,99,16,78,43,-638,33,61,90,0,12);
    $arr1 = array();


    for($k=0; $k<count($arr); $k++)
    {
    $arr1[$k] = $arr[$k];
    }


    for($i = 0; $i<count($arr1); $i++)
    {
    for($j = $i+1; $j<count($arr1); $j++)
    {
    if($arr1[$i] > $arr1[$j])
    {
    $temp = $arr1[$i];
    $arr1[$i] = $arr1[$j];
    $arr1[$j] = $temp;
    }
    }
    }
    foreach($arr1 as $valore)
    echo array_search($valore,$arr),"=>",$valore,"
    ";

    Grazie mille, vado sempre in confusione quando ci sono di mezzo gli array, non c'è nulla da fare :\
     
    Top
    .
  7.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Quindi il mio codice era corretto?
    Sono da telefono. ;-)
     
    Top
    .
  8. Samus89
     
    .

    User deleted


    Si, mancava solo la parte con array_search per stampare le chiavi originarie
     
    Top
    .
  9.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Ad ogni modo che problemi hai con gli array?
     
    Top
    .
  10. Samus89
     
    .

    User deleted


    Il mio problema è che ogni volta che ho un esercizio o comunque una parte di codice con gli array vado nel pallone, ed è scandaloso visto che sono importantissimi =(
     
    Top
    .
  11.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Ma cosa ti crea problemi in particolare? Non ti è chiaro qualcosa?
     
    Top
    .
  12. Samus89
     
    .

    User deleted


    Penso che purtroppo la cosa che non mi sia ancora entrata nel cervello sia proprio il "ragionamento" negli algoritmi quando c'è un array di mezzo, visto che comunque la sintassi ce l'ho ben presente, devo fare molto più esercizio.
    Posso permettermi di chiedervi un altro consiglio? Vorrei sapere se ho fatto un ragionamento giusto. Devo creare una funzione che estrapoli gli indirizzi mail da un file di testo così formato:
    1, nome1, indirizzo1
    2, nome2, indirizzo2
    3, nome3, indirizzo3

    e invii una multimail a questi destinatari,prima di tutto quello che ho fatto è stato aprire il file e leggerlo,ora dovrei creare un array multidimensionale per estrapolare gli indirizzi?
    Ho utilizzato la funzione file per scorrere ogni riga, poi explode considerando un campo dopo ogni virgola e poi pensavo di fare un foreach per associare i valori all'array, potrebbe essere giusto?
     
    Top
    .
  13.  
    .
    Avatar

    Senior Member

    Group
    Staff
    Posts
    10,796

    Status
    Anonymous
    Si, un array a due dimensioni mi sembra una buona soluzione. Concordo su tutto, almeno a prima vista, ma non capisco perchè il ciclo for-each. Gli elementi sono già associati, ogni volta che inserisci gli elementi occupano una data posizione.
    Per essere più chiaro, nel caso di una matrice (array a due dimensioni):

    CODICE
    array[0][0] = "Nome1";
    array[0][1] = "Indirizzo1";
    array[1][0] = "Nome2";
    array[1][1] = "Indirizzo2";


    In pratica ogni riga è composta da due colonne: nella prima il nome, e nella seconda l'indirizzo (associato a quel nome).
    Quindi se vuoi il secondo nome (indice di riga 1) dovrai solo accedere all'elemento array[1][0]. Nella colonna 1 (<i>array[1][1]) troverai invece il suo indirizzo.

    E' questo che intendevi?
     
    Top
    .
  14. Samus89
     
    .

    User deleted


    Esattamente si, grazie mille!!! allora tiro giù il codice e lo incollo qui, perché purtroppo arrivo a capire "come" fare le cose ma ho problemi quando scrivo il codice, non capisco perché =(
     
    Top
    .
  15. Samus89
     
    .

    User deleted


    Ho scritto la prima parte, anche se sono parecchio dubbiosa sulla sua esattezza.....pensavo al ciclo foreach per fare questo

    $apro=fopen("mail.txt","r");
    $leggo=fread($apro,filesize($file));

    function multimail($leggo){

    while (!feof($leggo)) {
    $linea_testo = file($leggo);

    foreach($linea_testo as $key => $value) {
    $linea_testo = explode(",",$value);
    $nome1 = $cvs[0] [1];
    $indirizzo1 = $cvs[0] [2];
     
    Top
    .
19 replies since 4/7/2014, 09:23   317 views
  Share  
.