You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:36:03