Domanda

Ho un array multidimensionale PHP di cui ho bisogno selettivamente Stampa su Excel Writer. Ho qualcosa di simile:

array(2) {
  [10227]=>
  array(9) {
    ["user"]=>
    string(5) "10227"
    ["talk_time"]=>
    string(1) "8"
    ["acw"]=>
    string(1) "0"
    ["idle"]=>
    string(1) "6"
  }
  [10236]=>
  array(9) {
    ["user"]=>
    string(5) "10236"
    ["talk_time"]=>
    string(2) "10"
    ["acw"]=>
    string(1) "3"
    ["idle"]=>
    string(1) "0"
  }
}

E in Excel ho bisogno che sembri un po 'così:

User  | talk_time  | acw  | idle
10227 | 8          | 0    | 6
10236 | 10         | 3    | 0

Penso di poter gestire la "scrittura" per eccellere, ma non riesco a convincere il PHP a scrivere selettivamente il valore per ogni campo in cui e come lo voglio. Ho letto molto e ho provato molte cose, penso che la risposta sarebbe quella di usare due foreach loop uno per l'array "iniziale" e un altro per il secondo array di dimensioni, ma per qualche motivo non posso farlo funzionare. Ho anche provato a usare "estratto" ma non è andato troppo bene ... Non sono un programmatore PHP "addestrato". Google è stata la mia università (e stackoverflow la mia facoltà) e anche se non ho troppi problemi a lavorare con gli array ..., il mondo si capovolge con array multidimensionali ...

Qualsiasi aiuto sarebbe molto apprezzato.

Grazie!

----- Modifica ----- OK, non ho bisogno della funzione "Esporta per eccellere", posso gestirlo una volta che posso assegnare il valore dell'array a una variabile.

Attualmente lo sto facendo:

foreach ($agents as $row){
  $USER=$row["user"];
  echo "$USER\n";
  foreach($row as $col){
  $TALK_SEC=$col["talk_sec"];
  }
}

Ma tutto quello che sto ottenendo è

1023610236102361023610236102361023610236102361023610236102361023610236102361023610236102361023610236102361023610236

Qual è il mio primo agente (sto limitando la mia query a 1 -limit 1-) volte 24 volte. Se aggiungo un'eco a $TALK_SEC, Avrei ottenuto il primo numero di ciascuno dei tre quattro campi che sto interrogando circa volte le 24 volte l'agente sarà "sputo" ...

Modifica e risposta finale

Sono stato in grado di farlo funzionare usando in realtà una singola dichiarazione foreach:

foreach ($agents as $row){
    //VAR_DUMP($row);
    $USER=$row['user'];
    $TALK=$row['talk_time'];
    $ACW=$row['acw'];
    $IDLE=$row['idle'];

Ora tutto quello che devo fare è stampare i nomi delle variabili ($USER, $TALK, ecc ...) nel foglio di calcolo con cui ho già creato PEAR::EXCEL_WRITER. Ovviamente devi creare un ciclo per iterare il diverso $USERS che la tua domanda emetterà.

È stato utile?

Soluzione

Questo script può generare File Excel. Ma nel tuo caso hai bisogno di formattare il tuo array per mettere:

User  | talk_time  | acw  | idle
10227 | 8          | 0    | 6
10236 | 10         | 3    | 0

Il copione:

<?php

$file="demo.xls";
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$file");
$array = array(
    array(10, 15, 20),
    array(10, 15, 20),
    array(10, 15, 20)
);
?>
<table>
<?php foreach($array as $row): ?>
    <tr>
    <?php foreach($row as $col):?>
        <td><?php echo $col ?></td>
    <?php endforeach; ?>
    </tr>
<?php endforeach; ?>
</table>

Altri suggerimenti

Questa è solo un'aggiunta alla risposta già pubblicata qui ... mostra solo come includere le intestazioni per l'array nel file Excel. Segna il post dell'altra persona come risposta, non il mio, se questo è ciò che fa per te.

produzione:

user    talk_time   acw      idle
10227   8           0        6
10236   10          3        0

codice:

<?php
$array = 
      array (
        10227 => 
        array (
          'user' => '10227',
          'talk_time' => '8',
          'acw' => '0',
          'idle' => '6',
        ),
        10236 => 
        array (
          'user' => '10236',
          'talk_time' => '10',
          'acw' => '3',
          'idle' => '0',
        ),
      );  
$file="demo.xls";
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$file");

$index = array_slice($array,0,1);  
$index = array_keys($index[0]);   

?>
<table> 
    <tr>
      <?php foreach($index as $heading): ?>
        <th><?php echo $heading ?></th>
      <?php endforeach; ?>
    </tr> 
    <?php foreach($array as $row): ?>
    <tr>
       <?php foreach($row as $col):?>
          <td><?php echo $col ?></td>
       <?php endforeach; ?>
   </tr>
   <?php endforeach; ?>
</table>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top