【问题标题】:Replace value in array doesn't work替换数组中的值不起作用
【发布时间】:2011-09-10 05:56:36
【问题描述】:

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

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 的值。在此先感谢您提供的任何帮助。

【问题讨论】:

    标签: php arrays replace foreach


    【解决方案1】:

    因为您在第一种情况下使用项目副本,请尝试使用 $pictureKeywordArray[$key]['match'] 而不是 $picValue['match']

    【讨论】:

    • +1。这(使用密钥)通常是最干净的解决方案。引用可能会变得混乱。
    • 在这个变体中 $key 被覆盖,因为在两个 foreaches 中都使用了),我们应该小心这个......
    【解决方案2】:

    在那一秒 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'];
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

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

      foreach ($foo as $i => &$f)
      {
        $f++;
      }
      
      unset($f); // important to do this if you ever want to reuse that variable later 
      

      【讨论】:

        猜你喜欢
        • 2016-11-08
        • 2013-08-28
        • 2019-02-18
        • 2022-11-26
        • 1970-01-01
        • 2014-09-09
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        相关资源
        最近更新 更多