【问题标题】:Looping through multiple php arrays to change value循环遍历多个 php 数组以更改值
【发布时间】:2018-01-26 05:19:43
【问题描述】:

我有一个数组$users

  [0] => Array (
    [userid] => 1
    [score] => 9.9
  )
  [1] => Array (
    [userid] => 2
    [score] => 9
  )

对于每个用户,然后我检索项目并将它们存储到一个数组中,$results

foreach ($users as $user) {
  $items = getItems($user['userid']);
  $results[] = $items:
}

$results 数组最终看起来像这样:

[0] => Array (
  [0] => Array (
    [itemid] => 1
    [rating] => 9.9
  )
  [1] => Array (
    [itemid] => 2
    [rating] => 9
  )
)
[1] => Array (
  [0] => Array (
    [itemid] => 3
    [rating] => 8.5
  )
  [1] => Array (
    [itemid] => 2
    [rating] => 7.5
  )
)

我想做的是权衡项目评分和用户评分。因此,对于每个项目,评分将乘以用户得分 * 0.1。

我试过的是这样的:

foreach ($users as $user) {
  $items = getItems($user['id']);
  foreach ($items as $item) {
    $item['rating'] = $item['rating'] * $user['score'] * 0.1;
  }
  $results[] = $items:
}

但无济于事。我做错了什么,如何获得想要的结果?

【问题讨论】:

  • 我认为您在流程的每一步都提出了问题。您的大多数问题(包括您删除的问题)都是重复的。我认为你也应该努力学习和解决你的问题。
  • 我已经删除了第一个骗子,因为它与您指出的问题几乎完全相同。另一个有点不同,所以我将其标记为欺骗。我总是在发帖前进行搜索,但我并不总是使用正确的术语或措辞,因此很难找到。

标签: php arrays multidimensional-array foreach


【解决方案1】:

默认情况下,foreach 的值为passed by value。因此,即使您在循环内更改数组内部的数据,它也不会被反映。所以你必须在$item之前使用&来通过reference传递数组数据。

您可以在此处了解更多信息http://php.net/manual/en/control-structures.foreach.php

【讨论】:

    猜你喜欢
    • 2012-11-08
    • 2019-07-10
    • 2013-03-25
    • 1970-01-01
    • 2012-02-28
    • 2012-04-21
    • 2011-01-02
    • 2016-02-16
    • 2021-09-17
    相关资源
    最近更新 更多