PHP - 解析特定事件的文本

时间:2015-08-20 09:13:38

标签: php domdocument domxpath

我正在处理一个代码,它给了我一个URL的输出源。 然后当我有这个输出时,我解析一个javascript文本。 这是我正在解析的文本:http://pastebin.com/7yZ9RqJa

这是我的代码:

new Context().getApplicationContext().getExternalCacheDir().getAbsolutePath()

这给我的结果如下:

<?PHP
$url = 'http://www.sportsdirect.com/dunlop-mens-canvas-low-top-trainers-246046?colcode=24604622';
libxml_use_internal_errors(true); 
$doc = new DOMDocument();
$doc->loadHTMLFile($url);
$xpath = new DOMXpath($doc);

$DataVariants = $xpath->query('//span[@class="ImgButWrap"]/@data-variants')->item(0)->nodeValue;

$jsonStart = strpos($DataVariants, '[');
$jsonEnd = strrpos($DataVariants, ']');

$collections = json_decode(substr($DataVariants, $jsonStart, $jsonEnd - $jsonStart + 1));

foreach ($collections as $item) {
    $ColVarId = $item->ColVarId;
    $SizeNames = $item->SizeVariants->SizeName;

    echo "$ColVarId - $SizeNames ,<br>";
}

?>

所以使用这段代码,我习惯了所有的24604603 - , 24604684 - , 24604640 - , 24604609 - , 24604682 - , 24604686 - , 24604681 - , 24604689 - , 24604602 - , 24604679 - , 24604680 - , 24604622 - , 24604685 - , 24604683 - , 24604621 - , 24604677 - , 24604688 - , 。 除此之外,我希望获得特定ColVarId的所有SizeName

例如,我想获取ColVarId = 24604603的所有SizeName ID。

是否有可能以及我如何做到这一点?

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以修改循环以将大小名称读取到下一个:

foreach ($collections as $item) {
    $ColVarId = $item->ColVarId;

    $SizeNames = [];
    foreach ($item->SizeVariants as $size) {
        $SizeNames[] = $size->SizeName;
    }
    $names = implode(',', $SizeNames);

    echo "$ColVarId - $names ,<br>";
}

另外我想在将 $ size-&gt; SizeName 值添加到 $ SizeNames 数组之前,如果它是真实/非空的大小,请更好地测试。

答案 1 :(得分:0)

SizeVariants也是一个数组,因此您无法访问该数组的SizeName属性,您必须指定要获取SizeName的该数组的哪个元素。

$SizeNames = $item->SizeVariants
foreach ($SizeNamesas $sn)
{
echo $sn->SizeName;
}

这是您访问SizeName的方式。 如果您想访问特定ColVarId的所有SizeNames,您可以在foreach内部检查。

$myColVarId = 24604603;
foreach ($collections as $item) {

    $ColVarId = $item->ColVarId;
    if($ColVarId == $myColVarId){
        $SizeNames = $item->SizeVariants
        foreach ($SizeNamesas $sn)
        {
              echo "$ColVarId".'-'.$sn->SizeName;
        }
    }
    else
    continue; //this item does not have our ColVarId, so we skip.
}


    $SizeNames = $item->SizeVariants->SizeName;

    echo "$ColVarId - $SizeNames ,<br>";
}

代码未经过测试。