Pergunta

Eu tenho um array multidimensional PHP que preciso seletivamente imprimir no Excel Writer.Eu tenho algo assim:

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 no Excel eu preciso que fique assim:

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

Acho que consigo gerenciar a 'escrita' para o Excel, mas não consigo fazer com que o php escreva seletivamente o valor para cada campo onde e como eu quiser.Eu li muito e tentei muitas coisas, acho que a resposta seria usar dois loops foreach, um para o array 'inicial' e outro para o array de segunda dimensão, mas por algum motivo não consigo fazer funcionar.Eu também tentei usar 'extrair', mas não deu muito certo ...Não sou um programador PHP 'treinado'.O Google tem sido minha universidade (e o stackoverflow meu corpo docente) e embora eu não tenha muita dificuldade em trabalhar com arrays..., o mundo vira de cabeça para baixo com arrays multidimensionais...

Qualquer ajuda seria muito apreciada.

Obrigado!

----- EDIT ----- OK, não preciso do recurso 'Exportar para Excel', posso lidar com isso quando posso atribuir o valor da matriz a uma variável.

Atualmente estou fazendo isso:

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

Mas tudo que estou conseguindo é

1023610236102361023610236102361023610236102361023610236102361023610236102361023610236102361023610236102361023610236

que é meu primeiro agente (estou limitando minha consulta a 1 -LIMIT 1-) vezes 24 vezes.Se eu adicionar um eco a $TALK_SEC, eu obteria o primeiro número de cada um dos três quatro campos que estou consultando sobre as 24 vezes em que o agente será 'cuspido'....

EDIÇÃO FINAL E RESPOSTA

Consegui fazê-lo funcionar usando, na verdade, uma única instrução foreach:

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

Agora tudo que preciso fazer é imprimir os nomes das variáveis ​​($USER, $TALK, etc...) na planilha que já criei com PEAR::EXCEL_WRITER.É claro que você precisa criar um loop para iterar os diferentes $USERS que sua consulta será gerada.

Foi útil?

Solução

Este script pode gerar arquivo Excel.Mas no seu caso você precisa formatar seu array para colocar:

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

O roteiro:

<?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>

Outras dicas

Este é apenas um acréscimo à resposta já postada aqui ...Apenas mostra como incluir os títulos da matriz no arquivo Excel.Marque a postagem da outra pessoa como respondida, não a minha, se for isso que funciona para você.

saída:

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

código:

<?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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top