Symfony中PHP遍历数组重设键名仅返回首个对象 如何获取全部结果
错误原因
你现有代码存在两个核心逻辑问题:
- 直接在存储原始Post实体的
$posts数组上追加元素,遍历过程中数组长度持续增加会导致死循环,且最终返回结果会混杂原始实体对象和你构造的数组,结构完全不符合预期 - 没有单独声明变量存储格式化后的结果,循环内的赋值逻辑混乱
修复方案
先初始化一个空数组专门存储格式化后的键值对,遍历原始实体数组时将处理后的结构推入该空数组,最终返回这个新数组即可,参考代码如下:
$posts = $this->myService->returnAllPosts(); // 初始化空数组存格式化结果 $result = []; foreach ($posts as $post) { $result[] = [ 'valueOne' => $post->getValueOne(), 'valueTwo' => $post->getValueTwo(), ]; } return $result;
可选简化写法
如果你的运行环境支持,可以用array_map实现更简洁的逻辑:
PHP 7.4以下版本
return array_map(function ($post) { return [ 'valueOne' => $post->getValueOne(), 'valueTwo' => $post->getValueTwo(), ]; }, $this->myService->returnAllPosts());
PHP 7.4及以上版本
可以用箭头函数进一步精简:
return array_map(fn($post) => [ 'valueOne' => $post->getValueOne(), 'valueTwo' => $post->getValueTwo(), ], $this->myService->returnAllPosts());
内容的提问来源于stack exchange,提问作者misafe
相关产品推荐
相关产品推荐

