我使用的是库PHP Simple HTML DOM Parser,我的数组正在运行。好吧,现在在一些解析的URL中,元素根本不存在(这是可以的),但我想创建一个条件,用字符串(如"not found")替换空数组值。
我怎样才能做到这一点?
这是代码:
$memb1 = 'http://www.xyz1.org';
$memb2 = 'http://www.abc3.org';
$memb(n) = '...etc...etc'
$teams = array(
array("url" => $memb1, "selector" => ".product-list >
table:nth-child(1) >
tbody:nth-child(1) >
tr:nth-child(2) >
td:nth-child(2) > a"),
array("url" => $memb2, "selector" => ".product-list >
table:nth-child(1) >
tbody:nth-child(1) >
tr:nth-child(2) >
td:nth-child(2) > a"),
array("url" => $memb(n), "selector" => ".product-list >
table:nth-child(1) >
tbody:nth-child(1) >
tr:nth-child(2) >
td:nth-child(2) > a"),...etc...etc
我的Foreach循环看起来是这样的:
foreach($teams as $site) {
$url = $site["url"];
$html = file_get_html($url);
foreach ($html->find($site["selector"]) as $a) {
$links[] = $a->href; break;
}
}
?>
<pre>
<?php print_r($links);?>
</pre>
因此,我将重申澄清;foreach
循环将来自'selector'
的找到的href
链路的值推入索引。当找不到元素时,它会跳到下一个索引,我想创建一个条件来检查该元素是否存在,如果不存在:将字符串推入该索引值。
假设索引2、4和5 href不存在,预期结果应该如下所示:
Array
(
[0] => http://www.abcd.com/etc/etc
[1] => http://www.gfege.com/etc/etc
[2] => Not Found
[3] => http://www.asdad.com/etc/etc
[4] => Not Found
[5] => Not Found
)
我不知道把这个条件和适合foreach
的正确语法放在哪里。
尝试一个if语句来检查
$a->href
是空的。所以代码看起来像这样:
if (empty($a->href)) {
links[] = "Not Found";
} else {
links[] = $a->href;
}
如果我理解你想要什么:
$links[] = ($a->href != "") ? $a->href : "Not Found";
看起来这里有点混乱,所以我要写下我认为你想要实现的每一件可能的事情,我要偏离你在后中的一句话
我想创建一个条件来检查该元素是否存在,如果不存在:将字符串推入该索引值。
如果您想查看是否存在特定的数组密钥,请使用此
$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
echo "The 'first' element is in the array";
}
您可以将字符串'first'
更改为循环中的任何字符串变量。如果您想查看数组键是否有"truthy"值,请使用以下命令:
isset($array['foo'])
同样,您可以将'foo'
替换为一个变量。
如果你想看到一个特定的值存在于一个数组中,使用这个
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix";
}
如果您正在检查字符串值,最好先修剪字符串。我以前遇到过这样的问题,一个变量被设置为类似$var = " "
的奇怪的东西,它的行为就像是一个真正的有长度的字符串。我喜欢做这种
if( strlen( trim($text) ) > 0) { ... }
如果这些条件中的任何一个是您想要的,只需将该索引值设置为您想要的字符串即可。
很抱歉,我没有很好地理解你的问题,从表面上看,其他人也有同感。祝你好运。
这就是您所需要的:
<?php
foreach($teams as $site) {
$url = $site["url"];
$html = file_get_html($url);
$anchors = $html->find($site["selector"];
if ($anchors !== null) {
foreach ($html->find($site["selector"]) as $a) {
$links[] = $a->href; break;
}
} else {
$links[] = 'Not found';
}
}
?>
但请记住,如果选择器返回多个<a />
标记,那么最终的数组将不会如您所期望的那样。