Изменения в массиве PHP не "залипают" - PullRequest
2 голосов
/ 19 февраля 2012

ОК, так что я делаю что-то для извлечения данных, но я изменяю массив (перезаписывая предыдущие значения массива) в цикле, и они показывают, что они были изменены, но как только я выхожу за пределы большого цикла значения возвращаются к своим исходным значениям.

Вероятно, проще привести пример:

Это начинается так, превращая кучу частей массива в слово "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); 

// Если бы я попытался напечатать переменную здесь, она была бы возвращена, как прежде, чем я изменил ее на «МАТЧ» print_r ($ prodURLS);

1 Ответ

1 голос
/ 19 февраля 2012

После запуска вашего кода, установки переменных следующим образом, это работает для меня:

$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 . Ознакомьтесь с Руководством по PHP для справки по функциям массива .

На самом деле, не так много можно сказать только из предоставленного вами кода.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...