如何在PHP

时间:2017-03-29 16:22:07

标签: php arrays

我正在使用Gmail API在我的PHP应用程序中列出未读邮件。我有很多需要学习的东西,并且正在拼凑我在这里发现的不同代码。一切正常,但它并没有完全按照我的方式展示。我的代码返回:

["
FedEx Shipment Notification
Mar 27th 2017 04:26 PM
TrackingUpdates@fedex.com","

Wellness 2 - Sp17: Re: Mike's fault!
Mar 26th 2017 06:13 PM
JohnSmith@mail.com "]

如何更改代码以仅返回:

FedEx Shipment Notification
Mar 27th 2017 04:26 PM
TrackingUpdates@fedex.com

Wellness 2 - Sp17: Re: Mike's fault!
Mar 26th 2017 06:13 PM
JohnSmith@mail.com

...电子邮件之间没有多余的引号,方括号和逗号?我知道我缺少一些基本知识。

我试过

substr($inboxMessage, 2)

...在list_messages函数中作为摆脱第一个引号和方括号的起点,但我得到了错误“substr()期望参数1为字符串,数组给出”

我也试过

$inboxMessages = array();

而不是

$inboxMessages = []

...但是只返回了一封电子邮件,它仍然在引号和括号中。

我也尝试在get_content函数中添加一个json_decode:

$this->content->items[] = json_decode($getmail->obtain_gmail_feed());

...产生错误“1082行/var/www/moodle/lib/outputcomponents.php中的数组到字符串转换”

我不知道还有什么可以尝试,我非常感谢你的帮助。

这是lib.php中的代码:

class get_gmail {

    function getHeader($headers, $name) {
        foreach($headers as $header) {
            if($header['name'] == $name) {
                return $header['value'];
            }
        }
    }

    function listMessages($service, $userId) {
        $list = $service->users_messages->listUsersMessages('me',
            ['maxResults' => 2, 'q' => 'in:inbox is:unread']);

        $messageList = $list->getMessages();
        $inboxMessage = [];

        foreach($messageList as $mlist){
            $optParamsGet2['format'] = 'full';
            $single_message = $service->users_messages->get('me',$mlist->id, 
                $optParamsGet2);
            $message_id = $mlist->id;
            $headers = $single_message->getPayload()->getHeaders();

            foreach($headers as $single) {
                if ($single->getName() == 'Subject') {
                    $message_subject = '<p>'.$single->getValue().'<br />';
                }

                else if ($single->getName() == 'Date') {
                    $message_date = $single->getValue();
                    $message_date = date('M jS Y h:i A', 
                        strtotime($message_date)).'<br />';
                }

                else if ($single->getName() == 'From') {
                    $message_sender = $single->getValue();
                    $message_sender = str_replace('"', '', $message_sender);
                }
            }

            $inboxMessage[] =$message_subject.$message_date.$message_sender;
        }

        return $inboxMessage;
    }
}

public function obtain_gmail_feed() {
    global $CFG, $USER, $message_list;
    require_once($CFG->libdir . '/google/lib.php');

    session_start();

    $client = new Google_Client();
    $client->setAuthConfigFile($CFG-
        >wwwroot.'/blocks/sko_gmail/client_secret.json');
    $client->addScope(Google_Service_Gmail::MAIL_GOOGLE_COM);   
    $client->setAccessToken($_SESSION['access_token']);
    $gmail_service = new Google_Service_Gmail($client);
    $useremail = 'me';

    $message_list = $this->listMessages($gmail_service, $useremail);
    $message_list = json_encode($message_list);

    return $message_list;
}

然后在index.php中:

require_once($CFG->dirroot . '/blocks/sko_gmail/lib.php');

class block_sko_gmail extends block_list {
    public function get_content() {
        global $message_list;

        $this->content = new stdClass;
        $getmail = new get_gmail();
        $this->content->items  = array();
        $this->content->items[] = $getmail->obtain_gmail_feed();

        return $this->content;

    }
}

我也欢迎任何关于如何改进我的代码的建议。

0 个答案:

没有答案