在PHP和foreach循环中,如何用字符串替换空数组值


In PHP and during a foreach loop, how can I replace empty array values with a string?

我使用的是库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 />标记,那么最终的数组将不会如您所期望的那样。