【问题标题】:How to modify subelement of multidimensional array in foreach iteration如何在foreach迭代中修改多维数组的子元素
【发布时间】:2014-02-23 16:48:32
【问题描述】:

我正在尝试修改多维数组的每个数组元素中第一个子元素的内容,但是,如果我通过引用传递所述元素,则会收到一个错误,即“&”不是预期的。我是否需要放弃 foreach ($arr as list ()) 语法并恢复为标准 for 循环并使用计数器变量进行访问?

foreach ($transactions as list(&$student, &$tyID)) {

    $query = "SELECT $column
              FROM student
              WHERE stUserID=$student";

    if ($stmt = mysqli_prepare($link, $query)) {
        mysqli_stmt_execute($stmt);

        mysqli_stmt_bind_result($stmt, $userHID);

        while (mysqli_stmt_fetch($stmt)) {
            $student = $userHID;
            $tyID = $transType[$tyID];
        }

        mysqli_stmt_close($stmt);
    }
}

编辑:更新代码,我实际上需要修改 transactions 数组中每个数组的前两个子元素。

【问题讨论】:

  • 事务数组中只有学生 ID 有什么? .修改子元素是什么意思??
  • transactions 包含一个交易数据数组(用户 ID、交易类型、借方、贷方等),其中第一个元素是学生标识符。我正在根据谁在查看页面来修改这个元素,如果是教师,它将是学生编号,如果是查看页面的学生,它将显示别名。我正在尝试在表格中输出之前执行所有重新格式化。 @尼纳德
  • 然后在获取事务表本身时执行检查并相应地获取数组
  • @Ninad 遗憾的是,该表仅包含对 userID 的引用,然后我必须将该 id 与另一个表的 id 进行匹配以找到我想要的值。数据库设计不在我的控制范围内。我要求做的是否超出了 PHP 当前的能力?我知道这种结构是在 5.5 中才引入的。
  • 那你为什么要使用对事务数组中元素的引用只使用简单的foreach循环来获取所需的id并修改为什么使用list??

标签: php multidimensional-array reference foreach


【解决方案1】:

为什么不能这样呢?假设键与列表变量相同

foreach ($transactions as &$transaction) {

    $query = "SELECT {$column}
              FROM student
              WHERE stUserID={$transaction['student']}";

    if ($stmt = mysqli_prepare($link, $query)) {
        mysqli_stmt_execute($stmt);

        mysqli_stmt_bind_result($stmt, $userHID);

        while (mysqli_stmt_fetch($stmt)) {
            $transaction['student'] = $userHID;
            $transaction['tyID'] = $transType[$transaction['tyID']];
        }

        mysqli_stmt_close($stmt);
    }
}

【讨论】:

  • 这基本上奏效了。我使用 list() 是因为它给了我要使用的变量,而不是我最终不得不使用的丑陋事务[#]。但除此之外,这仍然比我原本需要的 for 循环要好。谢谢你。如果我有足够的代表,我会投票!
  • 很高兴这有帮助,我想现在你可以了 :)
  • 还有2短!别担心,@code-jaff,我会尽快得到它。
猜你喜欢
  • 2013-01-15
  • 1970-01-01
  • 2015-10-13
  • 2019-02-17
  • 2021-12-04
  • 2015-08-23
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多