对PHP数组的更改不是;粘住;
好的,我正在做一些数据挖掘的工作,但是我在循环中对数组进行了更改(通过覆盖以前的数组值),它们表明它们已经被更改了,但是一旦我离开了一个更大的循环,值就会变回原来的值 举个例子可能更容易: 它是这样开始的,将数组的一堆部分转换为单词“匹配” 现在,如果我要立即转储数组的值,它将显示一些值已更改为“匹配”(即,在更改值之后,我将回显数组槽,并将其值显示为“匹配”),但是在我跳出循环后,数组将更改回其原始内容 以下是代码的压缩版本:对PHP数组的更改不是;粘住;,php,arrays,scope,Php,Arrays,Scope,好的,我正在做一些数据挖掘的工作,但是我在循环中对数组进行了更改(通过覆盖以前的数组值),它们表明它们已经被更改了,但是一旦我离开了一个更大的循环,值就会变回原来的值 举个例子可能更容易: 它是这样开始的,将数组的一堆部分转换为单词“匹配” 现在,如果我要立即转储数组的值,它将显示一些值已更改为“匹配”(即,在更改值之后,我将回显数组槽,并将其值显示为“匹配”),但是在我跳出循环后,数组将更改回其原始内容 以下是代码的压缩版本: //i've got this big loop for doin
//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);
//我有一个大循环来完成主要工作
做{
//SETDAT自动售检票机
$q=0;
//运行之前的整个刮取数组以检查匹配项,并将它们标记为未更改
做{
如果($itemTitle[$i]==$prodURLS[$q]){
$prodURLS[$q]=“匹配”;
echo“当值立即打印时,显示它已更改:“.prodURLS[$q]”“
”;
}
$q++;
}而($q<$urlArraySize);
$i++;
}而($i<$itemtitleArraySize);
//如果我尝试在这里打印变量,它将恢复为我将其更改为“匹配”之前的状态
打印(prodURLS) 通过运行代码,按如下方式设置变量,它对我很有用:
$prodURLS = array('a','b','c');
$itemTitle = array('a');
$urlArraySize = count($prodURLS);
$itemtitleArraySize = count($itemTitle);
$i = 0;
我的建议仅包含这一数量的信息,包括:
- 如madth3所示,提供更多上下文信息
- 检查设置/检查值的范围。您可能需要
运算符通过引用传递变量,或者需要&
关键字使用全局变量全局
- 要使用
循环,它将使代码更小,更易于阅读。此外,您不需要计算数组的大小,还具有其他优点,例如在使用关联数组时。同样,通过引用使用变量时要小心。例如: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数组函数,如。请查看网页上的PHP手册
祝你好运。压缩代码没问题,但我想看看
$itemTtle
和$prodURLS
从何处获取它们的值会很有用。这是从函数中调用的吗?e、 g.do_work($itemTitle,$prodURLS)代码>