سؤال

لدي مجموعة PHP متعددة الأبعاد أحتاج إليها بشكل انتقائي طباعة إلى Excel Writer. لدي شيء مثل هذا:

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"
  }
}

وفي Excel أحتاجه لتبدو نوعًا ما "مثل هذا:

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

أعتقد أنه يمكنني إدارة "الكتابة" للتفوق ، لكن لا يمكنني الحصول على PHP لكتابة القيمة بشكل انتقائي لكل حقل أين وكيف أريد ذلك. لقد قرأت الكثير وجربت العديد من الأشياء ، وأعتقد أن الإجابة هي استخدام حلقتين foreach واحد في صفيف "الأولي" وأخرى لمصفوفة البعد الثانية ، لكن لسبب ما لا يمكنني أن نجعلها. لقد حاولت أيضًا استخدام "استخراج" ، لكنه لم يسير بشكل جيد ... لست مبرمجًا "مدربًا". كانت Google جامعتي (و Stackoverflow أعضاء هيئة التدريس) وعلى الرغم من أنني لا أواجه الكثير من المتاعب في العمل مع المصفوفات ... ، فإن العالم يسير رأسًا على عقب مع صفائف متعددة الأبعاد ...

أي مساعدة سيكون موضع تقدير كبير.

شكرًا!

----- تحرير ----- حسنًا ، لا أحتاج إلى ميزة "التصدير إلى Excel" ، يمكنني التعامل مع ذلك بمجرد أن أتمكن من تعيين قيمة الصفيف إلى متغير.

أفعل هذا حاليًا:

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

لكن كل ما أحصل عليه هو

1023610236102361023610236102361023610236102361023610236102361023610236102361023610236102361023610236102361023610236

وهو وكيلي الأول (أنا أقصر استفساري على 1 -limit 1-) مرات 24 مرة. إذا أضفت صدى إلى $TALK_SEC, ، سأحصل على العدد الأول من كل من الحقول الأربعة الأربعة التي أتعلم فيها عن الأوقات التي سيكون فيها الوكيل 24 مرة "البصق" ...

التحرير النهائي والإجابة

تمكنت من الحصول عليها للعمل باستخدام بيان واحد foreach واحد:

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

الآن كل ما علي فعله هو طباعة الأسماء المتغيرة ($USER, $TALK, ، إلخ ...) في جدول البيانات الذي أنشأته بالفعل PEAR::EXCEL_WRITER. بالطبع تحتاج إلى إنشاء حلقة للتكرار على مختلف $USERS أن استفسارك سوف يخرج.

هل كانت مفيدة؟

المحلول

يمكن لهذا البرنامج النصي إنشاء ملف Excel. ولكن في حالتك ، تحتاج إلى تنسيق صفيفك لوضعه:

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

النص:

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

نصائح أخرى

هذه مجرد إضافة إلى الإجابة المنشورة بالفعل هنا ... إنها تُظهر فقط كيفية تضمين العناوين للمصفوفة في ملف Excel. حدد منشور الشخص الآخر كما تم الرد عليه ، وليس لي ، إذا كان هذا هو ما يفعله لك.

انتاج:

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

الشفرة:

<?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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top