• User

    Conteggiare arraymultidimensionali

    Ciao a tutti. Apro questa discussione per chiedervi un aiuto in merito agli array multidimensionali.
    Ho questo array multidimensionale:
    [PHP]Array
    (
    [0] => Array
    (
    [0] => 2018-12-31
    [1] => 05:57:00
    [2] => -0.001
    [3] => -0.005
    [4] => -0.002
    [5] => -0.008
    [6] => -0.019
    )

    [1] => Array
        (
            [0] => 2018-12-31
            [1] => 06:17:27
            [2] => -0.001
            [3] => -0.005
        )
    
    [2] => Array
        (
            [0] => 2018-12-31
            [1] => 06:37:55
            [2] => -0.001
            [3] => -0.005
            [4] => -0.004
        )
    
    [3] => Array
        (
            [0] => 2018-12-31
            [1] => 06:58:22
            [2] => -0.001
        )
    

    )[/PHP]
    Come potete vedere ogni chiave ha un numero diverso di elementi. So che per individuare il numero degli elementi c'è il comando "count". Ma come faccio a determinare il numero di elementi presenti in ogni singola chiave? (chiave 0 --> 7 elementi; chiave 1 --> 4 elementi; chiave 2 --> 5 elementi; chiave 3 --> 3 elementi)
    Grazie mille, ciao.


  • User Attivo

    Ciao,

    puoi farlo con un foreach

    [PHP]
    foreach($array as $a) {
    echo "Lunghezza array ".count($a)."<br>";
    }
    [/PHP]

    oppure con la funzione array_map() che ritorna un array (con le dimensioni degli array contenuti in quello principale).

    [PHP]
    $arrayLenght = array_map('count', $array);
    [/PHP]


  • User

    Ciao, grazie mille per l'aiuto. Sei stato gentilissimo.:)


  • User

    Ciao, scusa se ne approfitto ma vorrei chiederti un altro consiglio.
    Se da un array multidimensionale (con lo stesso numero di elementi in ciascuna chiave) volessi estrarre in stringhe tutti i dati che si trovano nelle stesse posizioni, come faccio?
    Faccio un esempio. Ipotizziamo di avere questo array:
    [PHP]Array
    (
    [0] => Array
    (
    [0] => 2018-12-31
    [1] => 05:57:00
    [2] => -0.001
    [3] => -0.005
    [4] => -0.002
    )

    [1] => Array
        (
            [0] => 2018-12-31
            [1] => 06:17:27
            [2] => -0.001
            [3] => -0.005
            [4] => -0.003
        )
    
    [2] => Array
        (
            [0] => 2018-12-31
            [1] => 06:37:55
            [2] => -0.001
            [3] => -0.005
            [4] => -0.004
        )
    

    )[/PHP]
    Da questo array vorrei creare delle stringhe 4 stringhe. In ogni stringa vorrei inserire rispettivamente:
    Stringa1: date
    Stringa2: ore
    Stringa3: valori chiave secondaria "2"
    .
    .
    .
    Suppongo debba usare un ciclo "for" dentro un altro ciclo "for" ma non riesco a ottenere esattamente quello che vorrei.
    Questo è quello he ho scritto:
    [PHP]for ($a = 0; $a <= 2; $a ++)
    {
    for ($b = 0; $b <= 4; $b ++)
    {
    $stringa = $array[$a]**;
    }
    }[/PHP]
    Secondo te dove sbaglio?
    Ciao, grazie mille.


  • User Attivo

    Ciao,

    scusa ti posso chiedere da dove provengono quei dati? Da un DB?

    Se li estrai da un DB, potresti farti ritornare l'indice di tipo stringa, piuttosto che quello numerico, così da poterci lavorare meglio.

    Es.

    [PHP]
    $array = [
    [
    'data' => '2018-16-01',
    'ora' => '18:00:00',
    'valore1' => -0.002,
    'valore2' => -0.001
    ]
    ]
    [/PHP]

    Puoi dirmi anche lo scopo del tuo script? Cioè mi sembra strano che tu voglia salvare i valori in variabili di tipo stringa. Potresti gestirli sempre con un array che è più comodo.

    Però se mi spieghi le tue esigenze, magari ti posso suggerire meglio 🙂


  • User

    Ciao flaviors200. Grazie per la risposta. Ti spiego ciò che sto facendo.
    In un DB ho tante tabelle contenenti dati provenienti da molti monitoraggi e ciascuna tabella contiene i dati del relativo monitoraggio. Un utente, dopo aver effettuato l'accesso alla propria pagina personale, può visualizzare sotto forma grafica e tabellare i dati del proprio monitoraggio (tieni presente che le tabelle sono tutte diverse fra di loro e per questo motivo ho pensato di utilizzare un indice di tipo numerico e non di tipo stringa).
    Quindi, estraggo i dati del monitoraggio dalla tabella in un array e da qui li inserisco in una libreria Javascript (Plotly) con la quale costruisco il grafico e la tabella.
    Spero di essere riuscito a spiegare bene ciò che devo fare.
    Ciao.


  • User Attivo

    Ciao,

    come immaginavo estrai i dati da un database, però probabilmente lo fai o con mysqli_fetch_row() oppure, se utilizzi la classe PDO, gli passi la costante PDO::FETCH_NUM

    Dai un'occhiata alla documentazione paragrafo "Parameters" https://www.php.net/manual/en/pdostatement.fetch.php#refsect1-pdostatement.fetch-parameters

    PDO::FETCH_ASSOC: returns an array indexed by column name as returned in your result set

    Praticamente puoi ritornare un array con gli indici che corrispondono alle colonne della tabella. Così eviti di dover salvare i dati in stringhe. Se usi MySQLi invece devi utilizzare mysqli_fetch_assoc().

    Una volta che hai i dati dentro una varabile ad esempio $array, puoi passarli a Plotly in formato JSON.

    Se può esserti d'aiuto, guarda questo esempio https://stackoverflow.com/questions/36625905/how-to-output-php-result-in-plottable-format

    Altrimenti posta il codice qui oppure su pastebin.