在同一个数组上使用嵌套的foreach循环

时间:2014-04-06 05:55:26

标签: php

是否可以在嵌套循环中再次循环数组并更改数组?

我有一个URL的数组,其中包含URL或域的条目(作为数组键):example.com

如果是此条目:domain:example.com我想删除包含example.com的所有URL作为域:

foreach (array_keys($urls1) as $line) {
        if (preg_match('/domain:(.*)/i', $line, $matches)) {
            $domain = $matches[1];
            foreach (array_keys($urls1) as $line2) {
                if ($url_domains[$line2] == $domain) {
                    unset($urls1[$line2]);
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,制作阵列的副本就是答案。这是我的问题:

如果特定文本字符串存在于文件的开头,并且(大约80个成员的数组)在文件末尾匹配一个字符串,我必须删除三行到最后。我没有使用副本时发生的问题是索引将从30重置为9,这导致了一些问题。

这对我有用。

$rowCopy = $row

foreach($row as $index => &$line) {

    ////previous code

    if ($line[0] === "NM1" && $line[1] === "77") {
        //read through the $row array and find the NM*85 string
        foreach ($rowCopy as $index2 => $lineT) {

            if ($s = strpos($lineT, "NM1*85") !== false) {
                $npiTest = explode("*", $lineT);
                if (strcmp(preg_replace("/[^0-9,.]/", "", $npiTest[9]), $line[9]) === 0) {
                    // $line = false;
                    $index--;
                    unset($row[$index + 1]);
                    $index++;
                    unset($row[$index + 1]);
                    $index++;
                    unset($row[$index + 1]);
                    $erased = $erased + 3;
                    $index++
                }
            }
        }

    }

}