Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 替换数组中的值不';行不通_Php_Arrays_Replace_Foreach - Fatal编程技术网

Php 替换数组中的值不';行不通

Php 替换数组中的值不';行不通,php,arrays,replace,foreach,Php,Arrays,Replace,Foreach,我快发疯了,花了几个小时在数组中尝试替换值的不同方法,但我无法让它工作 foreach($potentialMatches as $potentialKey) { $searchKeywordQuery = "SELECT keyword, id FROM picture WHERE id='$potentialKey'"; $searchKeywords = mysql_query($searchKeywordQuery) or die(mysql_error()); while

我快发疯了,花了几个小时在数组中尝试替换值的不同方法,但我无法让它工作

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['match']时,它会在“++”之后给我一个正确的值。但在下面,当我再次调用数组时,它给出的值是4,而不是预期的5。提前感谢您的帮助。

在这一秒中,您需要通过引用调用它:

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

foreach
处理数据的副本。必须使用引用来修改原始文件:

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

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

因为您在第一种情况下使用项目副本,请尝试使用
$pictureKeywordArray[$key]['match']
而不是
$picValue['match']
+1。这(使用密钥)通常是最干净的解决方案。引用可能会变得混乱。在这个变量中,$key被覆盖(因为在两个foreach中都使用了),我们应该小心这个。。。