0

搜索 $data 之间和内部是否存在文本

所有 XML 数据都在 $data 中

我想搜索 7431 是否存在

XML 数据如下所示:

<status>
<connection_status>successful</connection_status>
<operation_status>successful</operation_status>
<Options>
<data_2>
<data_7422731>
<id>7431</id>
<assetId>2</assetId>
<startDate>2013-03-05 11:00:00</startDate>
<endDate>2013-03-05 12:00:00</endDate>
</data_7422731>
</data_2>
</Options>
</status>

... 结果:

echo '是的,找到了'; // 或不

我怎样才能做到这一点?

4

4 回答 4

2

试试这个:

$string = <<<XML
<?xml version='1.0'?> 
<status>
<connection_status>successful</connection_status>
<operation_status>successful</operation_status>
<Options>
<data_2>
<data_7422731>
<id>7431</id>
<assetId>2</assetId>
<startDate>2013-03-05 11:00:00</startDate>
<endDate>2013-03-05 12:00:00</endDate>
</data_7422731>
</data_2>
</Options>
</status>
XML;

$xml = simplexml_load_string($string);

print_r($xml);

它将返回一个对象。那么您必须使用此函数将此对象转换为数组

function object2array($object) {
    $return = NULL;
    if(is_array($object)) {
        foreach($object as $key => $value)
        $return[$key] = $this->object2array($value);
    } else {
        $var = @get_object_vars($object);
        if($var) {
            foreach($var as $key => $value)
            $return[$key] = $this->object2array($value);
        } else
        return $object;
    }
    return $return;
}

它将返回一个数组,然后您可以使用在数组中找到您的字符串

in_array() 函数。

希望这会帮助你。

于 2013-03-05T13:57:24.997 回答
0
   if(strpos($data, '>7431<') === true) 
        {
        //code if 7431 is found...
        }
    else
        {
        //if not found....
        }
于 2013-03-05T13:55:15.373 回答
0
if (strpos($data, '<id>7431</id>')) echo 'Yes it was found';
else echo 'No it was not found';

如果您只想知道字符串 $data 是否包含所需的文本,这将起作用,但是如果您需要解析 XML,请查看 simpleXML API

编辑:更改为 strpos() 以解决性能问题,并搜索标签,"<id>7431</id>"(您也可以执行 a ">7431</")以避免匹配任何包含 7431 即 77431 的字符串

于 2013-03-05T13:55:22.680 回答
-2

您需要在字符串之前添加 char'>'并在 char 之后添加'<' 并使用strpos ()

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

在 haystack 字符串中查找第一次出现 needle 的数字位置。

haystack - 要搜索的字符串。

needle - 如果 needle 不是字符串,则将其转换为整数并用作字符的序数值。

offset - 如果指定,搜索将从字符串开头开始计数的字符数开始。与 strrpos() 和 strripos() 不同,偏移量不能为负数。

返回针相对于 haystack 字符串开头的位置(与偏移量无关)。另请注意,字符串位置从 0 开始,而不是 1。

如果未找到针头,则返回 FALSE。

试试这个:

   <?php
    $data;//= to you xml data
    $findme   = '7431';
    $pos = strpos($data,'>'.$findme.'<');

    if ($pos === false) 
    {
        echo "NO it wasn't found'; // or not";
    } 
    else 
    {
        echo "Yes it was found";   
    }
    ?>
于 2013-03-05T13:54:38.963 回答