为了账号安全,请及时绑定邮箱和手机立即绑定

PHP-在foreach循环中修改当前对象

PHP-在foreach循环中修改当前对象

PHP
元芳怎么了 2019-12-13 14:10:18
我想知道是否可以编辑foreach循环中正在处理的当前对象我正在处理一系列对象$questions,我想遍历数据库中查找与该问题对象相关的答案。因此,对于每一个问题去获取答案对象,并更新当前$question 里面我的foreach循环,这样我可以输出/别处过程。foreach($questions as $question){    $question['answers'] = $answers_model->get_answers_by_question_id($question['question_id']);
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

当然使用array_map(如果使用实现容器的容器ArrayAccess来派生对象)仅仅是一种更聪明的语义方法吗?


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


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


<?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);


<?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可以做到明确。



查看完整回答
反对 回复 2019-12-14
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

foreach确实不建议使用in引用foreach,因为循环值部分的传递会导致不可预测的行为。它可能会更长,但是使用此处的方法1会更加安全。



查看完整回答
反对 回复 2019-12-14
  • 3 回答
  • 0 关注
  • 354 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信