Заменить значение в массиве не работает - PullRequest
1 голос
/ 07 июня 2011

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

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'];
}

Я новичок, как вы можете видеть, Когда я повторяю picValue ['match'] в цикле foreach, это дает мне правильное значение после "++".Но затем ниже, когда я снова вызываю массив, он дает мне значение 4 вместо 5, как предполагалось.Заранее спасибо за любую помощь с этим.

Ответы [ 3 ]

2 голосов
/ 07 июня 2011

Потому что вы работаете с копией элемента в первом случае, попробуйте $pictureKeywordArray[$key]['match'] вместо $picValue['match']

1 голос
/ 07 июня 2011

В эту секунду foreach вам нужно позвонить по ссылке:

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'];
    }
  }
}
0 голосов
/ 07 июня 2011

foreach работает с копией данных.Вы должны использовать ссылку для изменения оригинала:

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

unset($f); // important to do this if you ever want to reuse that variable later 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...