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

时间:2016-07-21 14:12:47

标签: php arrays foreach

我正在使用库PHP Simple HTML DOM Parser并且我的数组正在运行A-OK,现在在解析的一些URL中元素根本不存在(这是正常的)但我想创建一个条件将使用诸如“未找到”之类的字符串替换空数组值。

我怎样才能做到这一点?

以下是代码:

$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循环将href中找到的'selector'链接的值推入索引。当找不到元素时它只是跳到下一个索引,我想创建一个条件来检查该元素是否存在,如果不存在:将索引值推入字符串。

所以让我们说索引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的正确语法。

4 个答案:

答案 0 :(得分:0)

如果我理解你想要的东西:

$links[] = ($a->href != "") ? $a->href : "Not Found";

答案 1 :(得分:0)

尝试检查

的if语句
$a->href

是空的。所以代码看起来像这样:

if (empty($a->href)) {
    links[] = "Not Found";
} else {
    links[] = $a->href;
}

答案 2 :(得分:0)

看起来这里有点混乱,所以我要写出我想解释的所有可能的东西,我要从你的一句话中删除

  

我想创建一个条件来检查该元素是否存在,如果不存在:将索引值推入字符串。

如果要查看是否存在特定的数组键,请使用此

$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
    echo "The 'first' element is in the array";
}

您可以将字符串'first'更改为循环中的任何字符串变量。如果你想看看数组键是否具有&#34; truthy&#34;价值,使用此:

isset($array['foo'])

同样,您可以用变量替换'foo'

如果要查看数组中存在特定值,请使用此

$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}

如果要检查字符串值,最好事先修剪字符串。我过去曾遇到过将变量设置为像$var = " "这样奇怪的问题的问题,并且它的行为就像是一个有长度的真正字符串。我喜欢做这样的事情

if( strlen( trim($text) ) > 0) { ... }

如果您想要这些条件中的任何一个,只需将该索引值设置为您想要的字符串。

这几乎总结了我。对不起,我不太了解你的问题,从外表来看,还有其他人也有同感。祝你好运。

答案 3 :(得分:0)

这就是你需要的:

TableA.append(newTable)

但请记住,如果您的选择器返回多个# Table A 0 1 2 0 2 3 4 1 5 6 7 2 8 9 10 # Table B 0 1 2 0 1 3 4 1 5 7 8 2 9 10 0 # Set 'Key' column = 1 # Run the script after the loop # Table A 0 1 2 0 2 3 4 1 5 6 7 2 8 9 10 3 5 7 8 4 9 10 0 # Table B 0 1 2 1 5 7 8 2 9 10 0 标记,那么您的最终数组将不会如您所愿。