Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 向提取的网站数据添加千位分隔符_Php_Html_Xpath_Web Scraping_Domdocument - Fatal编程技术网

Php 向提取的网站数据添加千位分隔符

Php 向提取的网站数据添加千位分隔符,php,html,xpath,web-scraping,domdocument,Php,Html,Xpath,Web Scraping,Domdocument,我有一个代码,可以检索整数值,然后对它们求和。但是,当我尝试向提取的值添加千位分隔符时,它将无法正确合计 代码如下: <?php $ch = curl_init('http://www.alibaba.com/Products'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US

我有一个代码,可以检索整数值,然后对它们求和。但是,当我尝试向提取的值添加千位分隔符时,它将无法正确合计

代码如下:

<?php
$ch = curl_init('http://www.alibaba.com/Products');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$html = curl_exec($ch);
$dom = new DOMDocument();
@$dom->loadHTML($html);
$finder = new DOMXPath($dom);
$nodes = $finder->query('//h4[@class="sub-title"]');

$total_A = 0;
foreach ($nodes as $node) {
    $sub_no =  (int) preg_replace("/[^0-9]/", '', trim(explode("\n", trim($node->nodeValue))[2]))  . '<br/>';
    $total_A += $sub_no;
    echo $sub_no;
    $convert = number_format( $total_A , 0 , '.' , ',' );
}

    echo "Total: $convert";
?>
我试过:

  $sub_no =  number_format(preg_replace("/[^0-9]/", '', trim(explode("\n", trim($node->nodeValue))[2])), 0 , '.' , ',' )  . '<br/>';
它对提取的值有效,但总的值会被弄乱。我怎样才能纠正这个问题?谢谢

编辑:我设法得到正确的总输出:407418309,但我也希望 $sub_不,当我重复它时,也有千个分隔符,而不仅仅是总数。但当我这样做时,总数将显示错误。 输出应如下所示: 397893,1注意到分隔符了吗? 184,471,0 729,391,9 等
总计:407418309

为什么不以数字\u格式回显最终输出

或者更确切地说:

$total_A = 0;
foreach ($nodes as $node) {
    $sub_no =  (int) preg_replace("/[^0-9]/", '', trim(explode("\n", trim($node->nodeValue))[2]))  . '<br/>';
    $total_A += $sub_no;
    echo $sub_no;
}

    echo "Total: ".number_format($total_A, 0 , '.' , ',' );

为什么不以数字\格式回显最终输出

或者更确切地说:

$total_A = 0;
foreach ($nodes as $node) {
    $sub_no =  (int) preg_replace("/[^0-9]/", '', trim(explode("\n", trim($node->nodeValue))[2]))  . '<br/>';
    $total_A += $sub_no;
    echo $sub_no;
}

    echo "Total: ".number_format($total_A, 0 , '.' , ',' );

您可以先对所有变量求和,然后在最后格式化它们以供查看。这里的简单逻辑是先分离算术,然后在算术之后格式化它们,这样就不会有冲突了

$total_A = 0;
foreach ($nodes as $node) {
    $sub_no =  (int) preg_replace("/[^0-9]/", '', trim(explode("\n", trim($node->nodeValue))[2]));
    $total_A += $sub_no;
    echo number_format($sub_no, 0 , '.' , ',' ) . '<br/>';
}

echo "Total: ".number_format($total_A, 0 , '.' , ',' );

您可以先对所有变量求和,然后在最后格式化它们以供查看。这里的简单逻辑是先分离算术,然后在算术之后格式化它们,这样就不会有冲突了

$total_A = 0;
foreach ($nodes as $node) {
    $sub_no =  (int) preg_replace("/[^0-9]/", '', trim(explode("\n", trim($node->nodeValue))[2]));
    $total_A += $sub_no;
    echo number_format($sub_no, 0 , '.' , ',' ) . '<br/>';
}

echo "Total: ".number_format($total_A, 0 , '.' , ',' );

通常,在所有计算完成后,您需要格式化数字。数字_格式用于显示目的,作为一种使最终输出符合您要求的方式。正确的输出是什么?407,418,309? 看起来很好。啊,现在知道了。thx GYY通常在所有计算完成后,您需要格式化数字。数字_格式用于显示目的,作为一种使最终输出符合您要求的方式。正确的输出是什么?407,418,309? 看起来很好。啊,现在知道了。thx家伙