首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >修改foreach循环中的数组值

修改foreach循环中的数组值
EN

Stack Overflow用户
提问于 2012-04-12 18:06:57
回答 2查看 117.6K关注 0票数 123

我想知道是否可以编辑正在foreach循环中处理的当前对象

我正在处理一个对象数组$questions,我希望在我的数据库中遍历并查找与该问题对象相关的答案。因此,对于每个问题,获取answer对象并更新 my foreach循环中的当前$question ,这样我就可以在其他地方输出/处理。

代码语言:javascript
复制
foreach($questions as $question){
    $question['answers'] = $answers_model->get_answers_by_question_id($question['question_id']);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-12 18:08:56

有两种方法可以做到这一点

代码语言:javascript
复制
foreach($questions as $key => $question){
    $questions[$key]['answers'] = $answers_model->get_answers_by_question_id($question['question_id']);
}

这样就可以保存密钥,这样就可以在主$questions变量中再次更新它

代码语言:javascript
复制
foreach($questions as &$question){

添加&将使$questions保持更新。但是我想说第一个是推荐的,尽管这个比较短(参见Paystey的评论)

每个the PHP foreach documentation

为了能够直接修改循环中的数组元素,在$value前面加上&。在这种情况下,该值将通过引用赋值。

票数 234
EN

Stack Overflow用户

发布于 2017-01-25 19:03:48

当然,使用array_map和使用实现ArrayAccess的容器来派生对象只是一种更智能、更具语义的方式吗?

在我见过的大多数语言和实现中,数组映射语义都是相似的。它旨在根据输入数组元素(高级忽略语言编译/运行时类型首选项)返回修改后的数组;循环的目的是执行更多的逻辑。

为了通过ID / PK检索对象,取决于您是否在使用SQL (这似乎是建议的),我会使用一个过滤器来确保我得到一个有效的PK数组,然后用逗号内爆并放入一个SQL IN()子句中以返回结果集。它通过SQL进行一次调用,而不是多次调用,优化了一点call->wait周期。最重要的是,我的代码对于具有一定能力的任何语言的人来说都可以很好地阅读,并且我们不会遇到可变性问题。

代码语言:javascript
复制
<?php

$arr = [0,1,2,3,4];
$arr2 = array_map(function($value) { return is_int($value) ? $value*2 : $value; }, $arr);
var_dump($arr);
var_dump($arr2);

vs

代码语言:javascript
复制
<?php

$arr = [0,1,2,3,4];
foreach($arr as $i => $item) {
    $arr[$i] = is_int($item) ? $item * 2 : $item;
}
var_dump($arr);

如果你知道你正在做的事情永远不会有易变性的问题(记住,如果你打算重写$arr,你总是可以$arr = array_map并显式的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10121483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档