วิธีการพิมพ์เนื้อหาของอาเรย์เป็นไฟล์บันทึกใน magento CE 1.7 โดยไม่ต้องวนซ้ำผ่านลูป?
วิธีการพิมพ์เนื้อหาของอาเรย์เป็นไฟล์บันทึกใน magento CE 1.7 โดยไม่ต้องวนซ้ำผ่านลูป?
คำตอบ:
Mage::log(print_r($arr, 1), null, 'logfile.log');
การเพิ่มพารามิเตอร์ตัวที่สองในprint_rจะส่งคืนสตริงที่มีตัวแปรที่พิมพ์
[แก้ไข]
ตามความคิดเห็นด้านล่างฉันรู้สึกว่าจำเป็นต้องเสนอตัวเลือกอื่นสำหรับการบันทึกอาร์เรย์
Mage::log($arr, null, 'logfile.log');
หรือถ้าคุณต้องการคำนำหน้าสตริงเพื่ออาร์เรย์
Mage::log('prefix'.Zend_Debug::dump($arr, null, false), null, 'logfile.log');
พารามิเตอร์ที่สองของZend_Debug::dump()
คือฉลาก หากนี่ไม่ใช่null
มันจะถูกเพิ่มเข้าไปก่อนการถ่ายโอนข้อมูลอาร์เรย์
พารามิเตอร์ที่สามของวิธีการZend_Debug::dump()
echo
หากเป็นtrue
ผลลัพธ์การถ่ายโอนข้อมูลจะถูกสะท้อนถ้าfalse
มันจะถูกส่งกลับเป็นสตริง false
ในกรณีของคุณที่คุณต้องการให้เป็น
print_r
ที่นี่นักตัดไม้ของวีโอไอพีจะทำการขยายอาร์เรย์และวัตถุโดยอัตโนมัติ
print_r
Zend_Debug::dump($var)
คุณเคยลองทำไหม:
Mage::log($array, null, 'logfile.log', true);
วิธีการบันทึก Mage ควรขยายอาเรย์ด้วยตนเอง
ดังที่ Petar ชี้ให้เห็นมันจะถูกขยายดังนั้นถ้ามันเป็นอาร์เรย์หรือวัตถุก็ไม่จำเป็นต้องมี print_r แต่ถ้าคุณผสมมันเช่น:
Mage::log('my string' . $array);
คุณได้รับปัญหาเนื่องจากอาร์เรย์ phps เป็นการแปลงสตริงหมายความว่า:
array(... whatever...) -> 'String'
และด้วยวัตถุ, php พยายามเรียกใช้เมธอด __toString หากไม่มีอยู่, มีข้อผิดพลาดเกิดขึ้น (ฉันคิดว่า)
และสำหรับการอ้างอิงMage::log()
:
\Mage::log
/app/Mage.php:784
public static function log($message, $level = null, $file = '', $forceLog = false)
{
// ...
// initialize ... blah stuff...
// check wether logging is on, developer mode or logging is forced
try {
// get the file, define the format... more stuff ... blah ...
if (is_array($message) || is_object($message)) {
$message = print_r($message, true);
}
$loggers[$file]->log($message, $level);
}
catch (Exception $e) {
}
}
ไม่มีการทดสอบ :-)