2012-02-19 19 views
2

OKデータマイニングを行うために何かを作っていますが、以前の配列値を上書きすることで配列に変更を加え、変更されたことを示しています一度大きなループの外に出ると、元の値に戻ります。一例を与えるためにおそらくPHP配列への変更

簡単に:

それは言葉「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」)は、しかし、アレイは、バックそれはここでは、コードの圧縮バージョンであるオリジナルのコンテンツ

ですへの変更しますここでは、それを "MATCH"に変更する前の状態に戻します。 print_r($ prodURLS);あなたのコードを実行しているから、

+1

コードを圧縮するのは大丈夫ですが、値を取得する '$ itemTtle'と' $ prodURLS'がどこにあるのが有用かを推測します。 – madth3

+0

これは関数内から呼び出されていますか?例えば'do_work($ itemTitle、$ prodURLS);' – raser

答えて

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! 
    
  • はまた、あなたはarray_walkのようなPHPの配列の機能の一部を便利かもしれません。 array functions referenceのPHP Manualを調べてください。

本当に、あなたが提供したコードから言えることはたくさんありません。

幸運。