如何实现一个函数,该函数在PHP中返回包含特定消息的条目的ID?

时间:2019-09-04 19:51:29

标签: php

我正在解决这个问题:

假设您得到一个包含如下所示的xml日志文件的字符串

<log>

<entry id='1'>

<message>

Application Started

</message>

</entry>



<entry id='2'>

<message>

Application Ended

</message>

</entry>


</log>

实现函数getIdsByMessage,该函数返回包含特定消息的条目的ID。

id应该是整数值,并且不需要对数组进行排序

例如上面的XML日志和消息“ Application Ended”的getIdsByMessage应该返回[2]

这是我到目前为止所拥有的:

<?php


function getIdsByMessage(string $xml, string $message) : array

{

DOMdocument::getElementsByTagName('message')


}


$xml = <<<XML

<?xml version="1.0" encoding="UTF-8"?>

<log>

<entry id="1">

<message>Application started</message>

</entry>

<entry id="2">

<message>Application ended</message>

</entry>

</log>

XML;

print_r(getIdsByMessage($xml, 'Application ended'));

1 个答案:

答案 0 :(得分:1)

目前无法对其进行测试,但我认为类似的方法会起作用。

<?php

function getIdsByMessage(string $xml, string $message) : array
{
    $xml = simplexml_load_string($xml);
    $msgIds = array();

    foreach ($xml->entry as $entry) {
        if ($entry->message == $message) {
            array_push($msgIds, $entry['id']);
        }
    }

    return $msgIds;
}

$xml = '<?xml version="1.0" encoding="UTF-8"?>

<log>

<entry id="1">

<message>Application started</message>

</entry>

<entry id="2">

<message>Application ended</message>

</entry>

</log>';

print_r(getIdsByMessage($xml, 'Application ended'));