Php 如何在以下内容中引入空白?
下面的PHP代码片段创建了Php 如何在以下内容中引入空白?,php,Php,下面的PHP代码片段创建了$desc好吧,但我喜欢在迭代过程中找到的每个dpItemFeatureList之间引入两(2)个空格 我似乎不知道到底要添加什么或在哪里添加一个片段来完成这项工作 function get_description($asin){ $url = 'http://www.amazon.com/gp/aw/d/' . $asin . '?d=f&pd=1'; $data = request_data($url); $desc = ''; if ($data) {
$desc
好吧,但我喜欢在迭代过程中找到的每个dpItemFeatureList
之间引入两(2)个空格
我似乎不知道到底要添加什么或在哪里添加一个片段来完成这项工作
function get_description($asin){
$url = 'http://www.amazon.com/gp/aw/d/' . $asin . '?d=f&pd=1';
$data = request_data($url);
$desc = '';
if ($data) {
$dom = new DOMDocument();
@$dom->loadHTML($data);
$xpath = new DOMXPath($dom);
if (preg_match('#dpItemFeaturesList#',$data)){
$k = $xpath->query('//ul[@class="dpItemFeaturesList"]');
foreach ($k as $c => $tot) {
$desc .= $tot->nodeValue;
}
}
}
return $desc;
由于您要将所有内容附加到desc,请尝试以下操作
$desc .= $tot->nodeValue;
$desc .= "<br />"
$desc.=$tot->nodeValue;
$desc.=“
”
试试看:
$desc .= $tot->nodeValue.' ';
和在循环后修剪($desc)
,以避免末端出现两个空格
或者,也可以创建一个数组:
$desc = array();
//....
$desc[] = $tot->nodeValue;
返回
内爆(“”,$desc)
查看您共享的代码,然后查看您正在处理的数据(我粘贴了一个示例),您实际上希望在
节点的子元素中收集文本
在原始代码段中,XPath如下所示:
'//ul[@class="dpItemFeaturesList"]'
这将只选择
元素,而不选择子元素。因此,当您尝试执行$tot->nodeValue
时,它将连接其所有子节点中的所有文本,而不使用空格(啊哈,这是您首先需要空格的真正原因)
要解决这个问题,我们应该做两件事:
选择相应节点中的
节点。将XPath更改为//ul[@class=“dpItemFeaturesList”]/li
在foreach
循环中,将两个不可破空格
(因为这是HTML)连接到$desc
变量
这里$c
是数组索引
function get_description($asin){
$url = 'http://www.amazon.com/gp/aw/d/' . $asin . '?d=f&pd=1';
$data = request_data($url);
$desc = '';
if ($data) {
$dom = new DOMDocument();
@$dom->loadHTML($data);
$xpath = new DOMXPath($dom);
if (preg_match('#dpItemFeaturesList#',$data)){
$k = $xpath->query('//ul[@class="dpItemFeaturesList"]/li');
foreach ($k as $c => $tot) {
if ($c > 0) {
$desc .= " ";
}
$desc .= $tot->nodeValue;
}
}
}
return $desc;
}
我们检查$c>0
,这样就不会在循环中的最后一个节点之后获得额外的空间
附言:与你原来的问题无关。共享链接的代码在$date=date(“format”,$timestamp)中有一个未定义的变量$timestamp
代码>在第116行
如果需要在每一次迭代之间添加代码,则需要在每次迭代前添加,但第一次:
$k = $xpath->query('//ul[@class="dpItemFeaturesList"]');
foreach ($k as $c => $tot) {
$c && $desc .= ' '; # all but first
$desc .= $tot->nodeValue;
}
这是一个表达式,它为您保存了一个if
,但其工作原理类似。也许有一点味道如此确定,一个if
也可以:
$k = $xpath->query('//ul[@class="dpItemFeaturesList"]');
foreach ($k as $c => $tot) {
if($c) $desc .= ' '; # all but first
$desc .= $tot->nodeValue;
}
这是因为在PHP中除了零以外的所有整数都是true
.这只在$desc结尾添加了一个换行符。谢谢。尝试过,但输出似乎没有变化。结果仍然相同。@TimLee Putvar\u dump($desc)返回之前的代码>。你得到了什么?输出中有空格吗?没有,我还是找不到。我不知道原因是什么;代码在这里。如果你能告诉我出了什么问题,我将不胜感激。谢谢。@TimLee在您运行此操作的数据中,每个dpItemFeaturesList
实际上都对应一个
元素。在遇到
标记后(即使在
的最后一个实例之后)是否要放置2个空格?请提供一个ASIN,它表示包含dpItemFeaturesList类的HTML。一般来说,这是有效的:-不知道您的具体问题是什么,可能是因为你没有提供符合你其他条件的ASIN?!只是感到困惑。ASIN B007MW146S。如果您查看,您将看到4个项目符号特征。我的输出显示此字符串显示为“AMD双核E-450处理器1.65GHz4 GB DIMM RAM500GB 5400rpm硬盘驱动器15.6英寸屏幕,ATI HD 6320GWindows 7 Home Premium(64位)”。您必须在请求数据
中拥有一些我这里没有的魔力(使用文件获取内容
)。对于您给我的ASIN B007MW146S,我无法通过您提供的URL获得它。我打赌你也不会:-请检查你是否提供了生成URI的正确代码。即使我请求与我的浏览器链接并在里面查找文本dpItemFeaturesList
我也没有在那里找到它。你一定是做错了什么,至少你没有提供你声称的信息;和使用