2011-06-07 12 views
1

私は狂気になり、配列の値を置き換えるには数時間かけて別のメソッドを試してみましたが、動作させることができません。配列の値を置き換えても機能しません

foreach($potentialMatches as $potentialKey) 
{ 
    $searchKeywordQuery = "SELECT keyword, id FROM picture WHERE id='$potentialKey'"; 
    $searchKeywords = mysql_query($searchKeywordQuery) or die(mysql_error()); 
    while ($searchKeyWordsRow = mysql_fetch_array($searchKeywords)) 
    { 
    $keyword = $searchKeyWordsRow['keyword']; 
    $pictureKeywordArray[$searchKeyWordsRow['id']]['keywords'] = explode(",", $keyword); 
    $pictureKeywordArray[$searchKeyWordsRow['id']]['match'] = 4; 
    } 
} 
foreach($pictureKeywordArray as $key = > $picValue) 
{ 
    foreach($picValue['keywords'] as $key = > $picIdValue) 
    { 
    if ($picIdValue == $searchIdKey) 
    { 
     echo $picValue['match']; 
     $picValue['match']++; 
     echo $picValue['match']; 
    } 
    } 
} 
foreach($pictureKeywordArray as $key = > $picValue) 
{ 
    echo $picValue['match']; 
} 

私はそれが私に「++」の後に正しい値を与えるforeachループでpicValue [「一致」]をエコーするときは、見ることができるように、私は初心者です。しかし、私が配列をもう一度呼び出すと、私は5の代わりに4の値を私に与えます。これに関する助けを前にありがとう。データのコピーに

foreach($pictureKeywordArray as $key => &$picValue) 
{          //^-- `&` makes it by reference 
    foreach($picValue['keywords'] as $key => $picIdValue) 
    { 
    if ($picIdValue == $searchIdKey) 
    { 
     echo $picValue['match']; 
     $picValue['match']++; //now updates what you want it to update 
     echo $picValue['match']; 
    } 
    } 
} 

答えて

1

。あなたは、元のを修正するための基準を使用する必要があります。

foreach ($foo as $i => &$f) 
{ 
    $f++; 
} 

unset($f); // important to do this if you ever want to reuse that variable later 
+0

おかげで、の代わりに$pictureKeywordArray[$key]['match']を試してみてください! :) – Philip

+0

@Philip、問題ありません^ _^ – Neal

0

foreach作品:あなたが参照することにより、それを呼び出す必要があり、第2 foreach

2

あなたが最初のケースでアイテムのコピーで作業原因、それは完全に働いた$picValue['match']

+0

+1。これは(キーを使用して)しばしば最もクリーンなソリューションです。参照が乱雑になることがあります。この変形例では – Matthew

+1

$ keyは両方のforeachで使用されるためオーバーライドされます)、これに注意する必要があります... –

関連する問題