对PHP数组的更改不“粘滞”

时间:2012-02-19 02:35:52

标签: php arrays scope

好的,所以我正在做一些事情来做一些数据挖掘,但我在一个循环中对一个数组进行了更改(通过覆盖以前的数组值)并且它们显示它们已被更改但是一旦我超出了更大的循环值会变回原来的值。

可能更容易举个例子:

它就像这样开始,将数组的一部分变成“MATCH”这个词。

现在,如果我要立即转储数组的值,它将显示某些值已更改为“MATCH”(即,在更改值后,我将回显数组槽,它将显示它的值为“ MATCH“)然而,当我进入循环外,数组会改回原来的内容

以下是代码的压缩版本:

//i've got this big loop for doing the main work
do {
            //Set dat ticker
            $q = 0;

            // Run through entire previous scrape array to check for matches and mark them as unchanged
            do {
            if ($itemTitle[$i] == $prodURLS[$q]) {
                $prodURLS[$q] = "MATCH";
                echo "When the value is printing immediately it shows that it's changed: ".$prodURLS[$q]."<br>";
            }
            $q++;
            } while ($q < $urlArraySize);
$i++;
} while ($i < $itemtitleArraySize); 

//如果我要尝试在这里打印变量,那么它将被恢复到像我之前将其更改为“MATCH”之前的状态 的print_r($ prodURLS);

1 个答案:

答案 0 :(得分:1)

从运行代码,设置变量如下,它适用于我:

$prodURLS = array('a','b','c');
$itemTitle = array('a');
$urlArraySize = count($prodURLS);
$itemtitleArraySize = count($itemTitle);
$i = 0;

仅提供此信息量的唯一建议是:

  • 提供更多上下文信息,正如madth3所暗示的那样。
  • 检查设置/检查值的范围。您可能需要&运算符按引用传递变量,或global关键字以使用全局变量。
  • 要使用foreach循环,它会使您的代码更小,更易于阅读。此外,您不需要计算阵列的大小,并将具有其他优点,例如在使用关联数组。同样,请注意通过引用使用变量。例如:

    foreach ($itemTitle as $item) {
        foreach ($prodURLS as &$prod) {
            if ($item == $prod) {
                $prod = 'MATCH';
            }
        }
    }
    unset($prod); //Unset variable set by reference if you are going to use it later on!
    
  • 此外,您可能会发现一些有用的PHP数组函数,如array_walk。查看array functions reference上的PHP手册。

真的,只有你提供的代码可以说很多。

祝你好运。