0

我有一个字符串:

$s = '<div data-x="0" data-y="0">Some text asdasdas</div>
<div data-x="0" data-y="-1000">Some text...</div>
<div data-x="0" data-y="-2000">Some text foobar</div>
<div data-x="500" data-y="-3000">Some t..</div>';

字符串可以不同。Divs 可以包括类等。

如何从每个 Div 的data-xdata-y中获取价值?像:

$x1 = 0; $y1 = 0;
$x2 = 0; $y2 = -1000;
$x3 = 0; $y3 = -2000;
$x4 = 500; $y4 = -4000;

我想将字符串分解成一个数组,但是我不知道该怎么做..

4

2 回答 2

0

此功能可能有用:

int strpos ( string $haystack , string $needle )
在 haystack 字符串中查找第一次出现 needle 的数字位置。

然后,您可以使用str_split()将字符串转换为数组,然后从指定位置获取所需的值。

您可以使用 while 循环来获取从返回的位置"到下一次开始之间的所有值。"strpos()

于 2012-11-21T12:27:06.920 回答
0

为此使用适当的 HTML 解析器:

$dom = new DOMDocument;
$dom->loadHTML( $s );
$xpath = new DOMXPath( $dom );
// xpath query: find all div nodes having a data-x and data-y attribute
$nodes = $xpath->query( '//div[@data-x and @data-y]' );
$result = array();
foreach( $nodes as $node )
{
    $result[] = array(
        'x' => (int) $node->getAttribute( 'data-x' ),
        'y' => (int) $node->getAttribute( 'data-y' ),
    );
}

如果你真的想要$x<n>$y<n>样式变量(其中<n>代表一个数字)作为结果(而不是结果数组),那么你可以用类似的foreach东西替换循环:

for( $n = 1; $n <= $nodes->length; $n++ )
{
    ${'x' . $n} = (int) $node->getAttribute( 'data-x' );
    ${'y' . $n} = (int) $node->getAttribute( 'data-y' );
}

不过,我仍然建议将它们收集在一个数组中;使之后的处理更容易。

于 2012-11-21T12:35:59.533 回答