Я пытаюсь извлечь значение из диапазона из URL-адреса сайта, но не могу выделить это конкретное значение ....
вот рассматриваемый промежуток
<span data-currency-market = "" data-usd = "63968175026.0">
Я хочу только значение data-usd
$html1 = file_get_contents( 'https://url.com' );
$dom1 = new DOMDocument();
@$dom1->loadHTML( $html1 );
foreach ($dom1->getElementsByTagName('span') as $tag) {
echo $tag->nodeValue . '<br/>';
}






Вы можете использовать preg_match_all вот так
<?php
// Loading data for demo
$html1 = '[...]
<span data-currency-market = "" data-usd = "63968175026.0"></span>
<span data-currency-market = "" data-usd = "63968175026.0"></span>
<span data-currency-market = "" data-usd = "63968175026.0"></span>';
// Your data source
//$html1 = file_get_contents( $string );
preg_match_all('/usd = "(.*)"/', $html1, $output_array);
// Showing array
echo "<pre>";
print_r($output_array);
echo "</pre>";
?>
Выведет это:
Если все, что вам нужно, это числа, используйте только
print_r($output_array[1]);
Итак, в конце все, что вам нужно, это 2 строки кода
$html1 = file_get_contents( $string );
preg_match_all('/usd = "(.*)"/', $html1, $output_array);
Ты можешь использовать
foreach($output_array[1] as $key=>$value){
echo $value;
}
вернуть ценности
Если вы ожидаете только одно совпадение на этой странице, вы можете использовать preg_match таким же образом, как это, вместо preg_match_all
<?php
$html1 = '[...]
<span data-currency-market = "" data-usd = "63968175026.0"></span>
<span data-currency-market = "" data-cad = "73175026.0"></span>
<span data-currency-market = "" data-eur = "83968176.0"></span>';
//$html1 = file_get_contents( $string );
preg_match('/usd = "(.*)"/', $html1, $output_array);
echo $output_array[1];
?>
Будет выведено: 63968175026.0
И последний вопрос. У вас есть идея расположить мои результаты в порядке возрастания? Например: $ html1 = file_get_contents ($ string); preg_match_all ('/ usd = "(. *)" /', $ html1, $ output_array); сортировка ($ output_array); foreach ($ output_array [1] как $ key => $ value) {echo $ value; }
Чтобы сделать это правильно с помощью DOM, вы можете использовать XPath для поиска всех элементов span с атрибутом data-usd. XPath - это просто //span/@data-usd, где @ обозначает атрибут. Вызов query() возвращает список совпадающих узлов, поэтому вы просто выполняете цикл таким же образом, как и с getElementsByTagName().
$html1 = '<div><span data-currency-market = "" data-usd = "1">
<span data-currency-market = "" data-eur = "2">
<span data-currency-market = "" data-usd = "3">
<span data-currency-market = "" data-eur = "4"></div>';
//$html1 = file_get_contents( 'https://url.com' );
$dom1 = new DOMDocument();
$dom1->loadHTML( $html1 );
$xp = new DOMXPath($dom1);
$dataUSD = $xp->query("//span/@data-usd");
foreach ($dataUSD as $tag) {
echo $tag->nodeValue . '<br/>';
}
который с тестовыми данными возвращает ...
1<br/>3<br/>
Нет проблем, Chrys!