【问题标题】:Create array from foreach loop with key使用键从 foreach 循环创建数组
【发布时间】:2012-12-06 14:46:20
【问题描述】:

我找不到我正在寻找的确切解决方案。

我正在尝试从保留键的 foreach 循环创建一个数组。这是我到目前为止的代码,但它只保留数组中的最后一个值:

foreach($links as $link) {
  //runs scrape_amazon function for each of the links
  $ret = scrape_amazon($link);

  foreach($ret as $key => $value) {
    //echo $key; 
    //echo $value;
    $final_results[$key] = $value;
  }
}

任何人都可以提供解决方案来保留所有值和键吗?

提前致谢!

【问题讨论】:

  • 您要的是一组键吗?
  • 根据您使用 foreach 循环的方式,在我看来,您的初始数组已经必须采用 $ret[key] = value 的格式?
  • 您的代码应该以$final_results 结尾,是$ret 的精确副本(假设一开始是空的)。你预计会发生什么?
  • 不,我有一个收集数据并将其放入 $ret 的函数,但每次运行它都会覆盖以前的值。我试图保留键和值,例如:[ASIN] => 123445 [Name] => Name [Retail] => 14.99。
  • 那么问题不在于您提供的代码,而在于您将值分配给$ret。正如 Jon 所说,上面只是创建了 $ret 的精确副本并将其放入 $final_results

标签: php arrays foreach


【解决方案1】:

根据您最近的评论,这应该可以解决您的问题:

$ret = array();

foreach($links as $link) {
  $ret[] = scrape_amazon($link);
}

每次调用scrape_amazon(),它会将返回给$ret的数组添加到数组数组中。

【讨论】:

  • 是的。这样做并创造了一个多维度的。谢谢!
  • @Reg - 看到你是这个网站的新手,我只是想提醒你接受答案。谢谢! :)
【解决方案2】:

如果你需要一个只有键的数组,你需要这样做

$ret_keys = array_keys($ret);

【讨论】:

    【解决方案3】:

    你为什么这样做?它看起来像:

    $final_results = $ret;
    

    【讨论】:

    • 我知道 $final_results 返回的结果与 $ret 相同。那就是问题所在。我曾想过使用 array_push,但无法将每次 $ret 的结果构建到单个 $final_results 数组中。
    • 您唯一的解决方案是:$final_results[] = $ret;或 $final_results[$ret['ASIN']] = $ret;
    • 谢谢。我现在看到的问题是它必须是多维的,因为有 3 个键。感谢您的帮助。
    【解决方案4】:
      // Create an empty array first      
      $final_results = array();
      foreach($links as $link) {
          //runs scrape_amazon function for each of the links
          $ret = scrape_amazon($link);
          $final_results[] = $ret; // DONE :)
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      相关资源
      最近更新 更多