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

    array diviso in subarray

    Ciao a tutti, ho trovato uno script che data altitudine e longitudine ti da l'altezza precisa prendendola da uno specifico server.
    Questa è la mia funzione per prendere le coordinate dei punti dal mio db e ricevere l'altezza:
    Codice PHP:

    $topoKey 
    'your_key_comes_here'//la chiave tipo quella di google 

    include( 'topocoding.inc' ); //lo script 

    $result mysql_query("SELECT id, latitude, longitude FROM table ORDER 
    BY id ASC"
    ); 
    $num_rows mysql_num_rows($result); 
    for(
    $i=1;$i<=$num_rows;$i++){ 
    $point=mysql_fetch_assoc($result); 
    print_rtopoGetAltitudes(array( array($point['latitude'], 
    $point['longitude']))));

    Il creatore dello script mi ha risposto che però sarebbe meglio concatenare tutti i punti in un grande array e tagliarlo in + subarray di 270 punti perchè lo script risponde al massimo altezze per 270 punti a volta e poi chiamare lo script per ogni subarray.

    Come si fa a farlo? non ne ho la minima idea!

  2. #2
    Ho trovato questo online ma mi restituisce un errore riguardo alla { sotto la linea di if
    Codice PHP:
    $points = array();
    for(
    $i=1;$i<=$num_rows;$i++){
    $point=mysql_fetch_assoc($result); 
    $points[sizeof($points)] = $point;
    if ( ( 
    sizeof($points) > 270 || (sizeof($points)==$num_rows) )
    {
    print_rtopoGetAltitudes($points));
    $points = array();
    }


  3. #3
    no scusate mancava una parentesi...

  4. #4
    Codice PHP:
    $num_rows mysql_num_rows($result);

    $points = array();
    for(
    $i=1;$i<=$num_rows;$i++){
    $point=mysql_fetch_assoc($result); 
    $points[sizeof($points)] = $point;
    if ( ( 
    sizeof($points) > 270) || (sizeof($points)==$num_rows) )
    {
    print_rtopoGetAltitudes($points));
    $points = array();
    }

    Ricevo un array vuoto: Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => ...

    dove sbaglio?

  5. #5
    non ho capito che intenda con "concatenare tutti i punti"

    l'array su cui applicare la funzione topo(losa? ) che struttura dovrebbe avere alla fine?

    codice:
    Array(
    
        0 => array(  ... elendo 270 punti )
        1 => array ( ...elenco altri 270 punti )
        2 => array (. .... )
    
    )
    una cosa del genere? e l'elenco dei punti in che formato deve essere?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  6. #6
    Allora, cerco di spiegare meglio quello che devo fare e come dovrebbe essere l'array.

    Questo è un esempio preso dalla guida e restituisce le altezze di 2 punti data latitudine e longitudine:

    Codice PHP:
    include( 'topocoding.inc' );
    print_rtopoGetAltitudes( array( array( 50.567817.1234 ), array( 49.345616.6789 ) ) ) ); 
    La funzione topoGetAltitudes però restituisce al massimo 270 altezze alla volta, quindi quello che devo fare io è richiamare la funzione ogni 270 punti.

    Provando così:

    Codice PHP:
    include( 'topocoding.inc' );
    $result mysql_query("SELECT id, latitude, longitude FROM tabella ORDER BY id ASC"); 
    $num_rows mysql_num_rows($result); 
    $points = array();
    for(
    $i=1;$i<=$num_rows;$i++){
    $point=mysql_fetch_assoc($result); 
    $points[sizeof($points)] = array($point['latitude'], $point['longitude']);
    if ( ( 
    sizeof($points) > 270) || (sizeof($points)==$num_rows) )
    {
    print_rtopoGetAltitudes($points));
    $points = array();
    }

    mi restituisce le altezze per soli 270 punti mentre io ne ho + di 400, qualcosa nel ciclo non va...

  7. #7
    tu ti devi creare un array del tipo:

    codice:
    Array(
    
        0 => array( array(lat,lang), array(lat,lang) ... per 270 punti )
        1 => array( array(lat,lang), array(lat,lang) ... per altri 270 punti )
        2 => array( array(lat,lang), array(lat,lang) ... per altri 270 punti )
        ......
    
    )
    e poi iteri su questo array e per ogni chiave (0,1,2) richiami la funzione topoGetAltitudes passando il valore corrispondente (l'array di 270 punti)...

    sostanzilamente ricavi i punti dal database e li inizi ad inserire nell'array usando una chiave corrente.. quando il count dell'array arriva a 270, aumenti di uno la chiave corrente... e poi iteri

    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  8. #8
    Ti ringrazio ma non so dove mettere le mani.... mi daresti 2 spunti in codice?

  9. #9
    Ho risolto facendo così:
    Codice PHP:
    $num_rows mysql_num_rows($result);
    $points = array();
    for(
    $i=1;$i<=$num_rows;$i++){
    $point=mysql_fetch_assoc($result);
    $points[sizeof($points)] = array($point['latitude'], $point['longitude']);
    if ( ( 
    sizeof($points) >= 270) || ($i==$num_rows) )
    {
    print_rtopoGetAltitudes($points));
    $points = array();
    }

    adesso mi stampa tutti i punti in questo modo (in questo esempio faccio finta che il limite sopra citato non sia 270 ma 4 ed il totale dei punti sia 12):

    Array ( [0] => 1000 [1] => 1100 [2] => 1200 [3] => 1300) Array ( [0] => 1400 [1] => 1500 [2] => 1600 [3] => 1700 ) Array ( [0] => 1800 [1] => 1900 [2] => 2000 [3] => 2100 )0

    quindi praticamente crea un nuovo array una volta che ha raggiunto il limite.

    Quello che vorrei fare adesso è aggiornare la tabella con la colonna altezze, cioè per esempio al primo punto dove l'id è 1 inserire 1000 dove id è 2 inserire 1100 e così via.
    E' fattibile la cosa?

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.